0

解析で1つの問題に直面しています.1つの文字列を次のように持っています:String str="20|^64|^New Income - GROWTH|^10.0|^27-Dec-2011"

これを区切り文字「|^」で解析したい。

私はそれを次のように試しました:

ArrayList<String> stocklist = IOUtil.parseResponse(str, "|^");

ここに parseResponse() メソッドがあります:

public static ArrayList<String> parseResponse(String input, String delimeter) {
    ArrayList<String> parsed_strings = new ArrayList<String>();
    while (true) {
        int i = input.indexOf(delimeter);
        if (i >= 0) {
            String s = input.substring(0, i);
            parsed_strings.add(s.trim());
            input = input.substring(i + delimeter.length(), input.length());
        } else {
            break;
        }
    }
    if (parsed_strings.size() < 1) {
        parsed_strings.add(input);
    }
    return parsed_strings;
}

しかし、私は最後の要素を取得していません27-Dec-2011。私は次java.lang.IndexOutOfBoundsException: Invalid index 4, size is 4 のように outOfBoundException を取得しています。前もって感謝します。

4

6 に答える 6

1

で終わる部分文字列のみを配列に追加してい|^ます。|^文字列の最後に追加すると、すべて問題ありません。または、文字列の残りの部分 (最後の区切り文字の後ろ) を常に追加するようにコードを変更します。このような:

public static ArrayList<String> parseResponse(String input, String delimeter) {
    ArrayList<String> parsed_strings = new ArrayList<String>();
    int i = -1;
    while ((i = input.indexOf(delimeter)) >= 0) {
        String s = input.substring(0, i);
        parsed_strings.add(s.trim());
        input = input.substring(i + delimeter.length(), input.length());
    }
    parsed_strings.add(input);
    return parsed_strings;
}

しかし、最善の方法は、文字列の分割方法を使用することです。

たとえば、次のようにします。

public static ArrayList<String> parseResponse(String input, String delimeter) {
    String quotedDelimiter = Pattern.quote(delimeter);
    String[] outputArray = input.split(quotedDelimiter);
    List<String> outputList = Arrays.asList(outputArray);
    return new ArrayList<String>(outputList);
}

それははるかにきれいに見えます。

于 2013-10-10T13:25:57.903 に答える
1
String []b = "20|^64|^New Income - GROWTH|^10.0|^27-Dec-2011".split("\\|\\^");
for (String a: b) {
   System.out.println(a);
}

版画:

20
64 
New Income - GROWTH
10.0
27-Dec-2011

あなたの日付の文字列は次のとおりb[4]です。

于 2013-10-10T13:24:52.363 に答える
0

問題はおそらくここにあります。

input = input.substring(i + delimeter.length(), input.length());

部分文字列()

public String substring(int beginIndex, int endIndex)

この文字列の部分文字列である新しい文字列を返します。部分文字列は、指定されたbeginIndexで始まり、インデックスendIndex - 1の文字まで拡張されます。したがって、部分文字列の長さは endIndex-beginIndex です。

于 2013-10-10T13:20:07.827 に答える