10

string1 から string7 という名前のプログラムに 7 つの文字列があります。

各文字列のサイズは 30 文字です。

長さ不明の入力文字列を取得します。

この入力文字列を 30 文字の文字列に分割し、最初の部分文字列を string1 に、2 番目の部分文字列を可能な限り string2 に設定する必要があります。入力文字列が 210 文字を超える場合、末尾の残りの文字列は無視されます。

入力文字列のサイズが 210 文字より小さい場合の処理​​方法。

たとえば 145 の場合、string1 から string4 までがいっぱいになり、string5 は残りの 15 文字で構成されます。

これをうまく処理するには?

すべての文字が消費されるまで、文字ごとに文字を読み取り、最初の 30 文字と文​​字列 1、次の文字列 2 などを配置することができます。

しかし、これを行うためのより良い方法はありますか?

4

11 に答える 11

18

サードパーティのライブラリを使用できる場合、Guavaを使用すると、これは単に

Iterable<String> chunks = Splitter.fixedLength(30).split(string);

List<String>これは、たとえばに変換できますLists.newArrayList

(開示:私はGuavaに貢献しています。)

于 2012-06-28T10:03:38.463 に答える
4

文字列は配列またはリストにないため、明示的に割り当てる必要があります。

    Matcher m = Pattern.compile(".{1,30}").matcher(s);
    String s1 = m.find() ? s.substring(m.start(), m.end()) : "";
    String s2 = m.find() ? s.substring(m.start(), m.end()) : "";
    String s3 = m.find() ? s.substring(m.start(), m.end()) : "";
    String s4 = m.find() ? s.substring(m.start(), m.end()) : "";
    String s5 = m.find() ? s.substring(m.start(), m.end()) : "";
    String s6 = m.find() ? s.substring(m.start(), m.end()) : "";
    String s7 = m.find() ? s.substring(m.start(), m.end()) : "";
于 2012-06-28T10:27:55.263 に答える
1

これはあなたを助けるかもしれません。

public static void main(String args[]) throws IOException {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            String st = br.readLine();
            int len = st.length();
            String[] str = new String[7];
            len=len/30;
            int i=0;
            for(; i<7 && i<len; i++  ){
                str[i] = st.substring(30*i, 30*(i+1));
                System.out.println(str[i]);
            }
            if(i!=7){
                str[i] = st.substring(30*i, st.length());
                System.out.println(str[i]);
                }

        }
于 2012-06-28T10:23:07.180 に答える
1

これはうまくいくはずです:

 String str = "11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111";
        if (str.length() > 210)
        {
            str =  str.substring(0, 209);
        }
        String newStr  = str.replaceAll("(.{30})", "$1|");
        System.out.println(newStr);
        String[] newStrings = newStr.split("\\|");

これが行うことは、指定された文字列を取得し、30 文字ごとに区切り記号を挿入することです。この場合、ユーザーが何を入力し、何を入力しないかを理解していると仮定して、ユーザーが入力しないセパレーター (またはセパレーターのグループ) を投入できるようにします。これを行ったら、追加したセパレータを使用して文字列を分割します。

于 2012-06-28T10:12:47.637 に答える
0

これが私がしたことです。動作しているようです。私がどこか間違っている場合はコメントしてください:

package com.mypackage;

import java.util.ArrayList;
import java.util.List;


public class TestClass {

public static List<String> splitEqually(final String text, final int size) {

    List<String> ret = new ArrayList<String>((text.length() + size - 1) / size);
    for (int start = 0; start < text.length(); start += size) {

        if (start + size > 0) {

            String temp = text.substring(start, Math.min(text.length(), start + size));
            int length = temp.length();

            for (int i = 0; i < (size - length); i++) {
                temp = temp + " ";
            }

            ret.add(temp);

        } else {
            ret.add(text.substring(start, Math.min(text.length(), start + size)));
        }


    }
    return ret;
}

public static void main(final String args[]) {

    String input = "hello wo";

    String str1, str2, str3, str4, str5;

    List<String> result = TestClass.splitEqually(input, 3);

    try {
        str1 = result.get(0);
        System.out.println("1: " + result.get(0));

        str2 = result.get(1);
        System.out.println("2: " + result.get(1));

        str3 = result.get(2);
        System.out.println("3: " + result.get(2));

        str4 = result.get(3);
        System.out.println("4: " + result.get(3));

        str5 = result.get(4);
        System.out.println("5: " + result.get(4));

    } catch (IndexOutOfBoundsException e) {
    }

}
}
于 2012-06-28T10:23:18.243 に答える
0
import java.util.ArrayList;


public class Test {

public static void main(String[] args) {

    // your input
    String input = "";

    // strings 1-7 as array list
    ArrayList<String> results = new ArrayList<String>();

    int length;

    if(input.length() > 210) {

        length = 210;

    } else {

        length = input.length();

    }

    for(int i = 0; i <= length; i += 30) {

        if((length - (i + 30)) > 0) {

            results.add(input.substring(i, i + 30));

        } else {

            results.add(input.substring(i, length));

        }

    }

    for(int a = 0; a < results.size(); a++) {

        System.out.println("size: " + results.get(a).length() + " content: " + results.get(a));

    }

    }

    }
于 2012-06-28T10:51:19.007 に答える