-1

ここに私の文字列があります。[配列リストではありません]

[1], [<2254,89014103211118510720,C,D>,<2254,89014103211118510720,C,D>,<2254,89014103211118510720,C,D>,<2254,89014103211118510720,C,D>], [22630]

以下のようにArraylistに変換する方法

item 01 : [1]
item 02 : [<2254,89014103211118510720,C,D>,<2254,89014103211118510720,C,D>,<2254,89014103211118510720,C,D>,<2254,89014103211118510720,C,D>]
item 03 :  [22630]

編集済み

[1], [<2254... here also matched ", "
...0720,C,D>,<2254,890... here also matched ", "

item 02そのため、誤って分割されます。

4

4 に答える 4

3

これでできるはず

String s = "[1], [<2254,89014103211118510720,C,D>,<2254,89014103211118510720,C,D>,<2254,89014103211118510720,C,D>,<2254,89014103211118510720,C,D>], [22630]";

次に、セパレーターの分割とともにArrays.asList()を使用します", "

List<String> list = new ArrayList<String>(Arrays.asList(s.split(", ")));

あなたのコメントに、よろしいですか?

String itemTwo = "[<2254,89014103211118510720,C,D>,<2254,89014103211118510720,C,D>,<2254,89014103211118510720,C,D>,<2254,89014103211118510720,C,D>]";
System.out.println(itemTwo.equals(list.get(1)));

戻り値

true
于 2013-11-13T05:39:26.743 に答える
2

正規表現を使用した、はるかに簡単なソリューションを次に示します。

import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class TestRegularExpression2 {

    private static String input = "[1], [<2254,89014103211118510720,C,D>,<2254,89014103211118510720,C,D>,<2254,89014103211118510720,C,D>,<2254,89014103211118510720,C,D>], [22630]";

    public static void main(String[] args) {

        // Matches everything between the braces                
        Pattern pattern = Pattern.compile("\\[(.*?)\\]");
        Matcher matcher = pattern.matcher(input);   

        // Prints out each of the matching strings. 
        while (matcher.find()) {
            System.out.println("*" + matcher.group() + "*");
        }

    }

}

これの出力は

*[1]*
*[<2254,89014103211118510720,C,D>,<2254,89014103211118510720,C,D>,<2254,89014103211118510720,C,D>,<2254,89014103211118510720,C,D>]*
*[22630]*

于 2013-11-13T09:25:45.043 に答える
1
String str = "[1], [<2254,89014103211118510720,C,D>,<2254,89014103211118510720,C,D>,<2254,89014103211118510720,C,D>,<2254,89014103211118510720,C,D>], [22630]";

List<String> aList = new ArrayList<String>();

for (String s1 : str.split(", ")) {
    aList.add(s1);
}
于 2013-11-13T05:39:29.143 に答える
0
import java.util.ArrayList;
import java.util.Arrays;


/**
 * @author JFVARUGH
 * here is my String. [NOT A Arraylist] [1],
 *  [1],
 *  [<2254,89014103211118510720,C,D>,<2254,89014103211118510720,C,D>,<2254,89014103211118510720,C,D>], ...
 *
 *item 01 : [1]
  item 02 : [<2254,89014103211118510720,C,D>,<2254,89014103211118510720,C,D>,<2254,89014103211118510720,C,D>,<2254,89014103211118510720,C,D>]
  item 03 : [22630]
 */
public class StringProblel {

    @SuppressWarnings("null")
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        int index =0, tempIndex=0,stringIndex=0;
        char[] keyWrds =  {'[',']',','};
        char[][] temp = new char[1000][1000];

        String sourceStr = "[1],[<2254,89014103211118510720,C,D>,<2254,89014103211118510720,C,D>,<2254,89014103211118510720,C,D>,<2254,89014103211118510720,C,D>], [22630] ";

        while(index < sourceStr.length()){
            if( sourceStr.charAt(index) == keyWrds[0] ){
                temp[stringIndex][tempIndex] = sourceStr.charAt(index);
                while(sourceStr.charAt(index) != keyWrds[1] && index < sourceStr.length()){
                    index++;
                    temp[stringIndex][++tempIndex] = sourceStr.charAt(index);                   
                }

                stringIndex++;              
            }
            index++;
        }
        System.out.println(temp[1]);
    }

}


The time complexity will be O(n2). There is scope for improvements !

動作していることを確認しました。

于 2013-11-13T08:37:05.833 に答える