2

次のように宣言されたリスト内の要素の値を解析しようとしています。

 List<String> uniqueList = new ArrayList<String>(dupMap.values());

値は次のとおりです。

a:1-2
b:3-5

しかし、最初の番号(つまり、1、3)を持つ1つのArrayListと、2番目の番号(つまり、2、5)を持つ別のArrayListが必要です。私はこれを解決しました...Sorta:

String delims= "\t"; String delim2= ":"; String delim3= "-";
String splits2[]; String splits3[]; String splits4[];
Map<String,String> dupMap = new TreeMap<String, String>();
List<String> uniqueList = new ArrayList<String>(dupMap.values());
ArrayList<String> parsed2 = new ArrayList<String>();
ArrayList<String> parsed3 = new ArrayList<String>();
ArrayList<String> parsed3two= new ArrayList<String>();
double uniques = uniqueList.size();
for(int a=0;a<uniques;a++){
    //this doesn't work like it would for an ArrayList
    splits2 = uniqueList.split(delim2) ;
    parsed2.add(splits2[1]);
    for(int q=0; q<splits2.length; q++){
        String change2 = splits2[q];
        if(change2.length()>2){
           splits3 = change2.split(delim3);
           parsed3.add(splits3[0]);
           String change3=splits3[q];
           if (change3.length()>2){
               splits4 = change3.split(delims);
               parsed3two.add(splits4[0]);
           }
        }
     }
  }

ただし、uniqueList.splitは機能せず、Listに同様の関数があるかどうかはわかりません。何か提案はありますか?

4

2 に答える 2

5

すべてのデータが の形式[something]:[num]-[num]であることがわかっている場合は、次のような正規表現を使用できます。

Pattern p = Pattern.compile("^([^:]*):([^-]*)-([^-]*)$");

// I assume this holds all the values:
List<String> uniqueList = new ArrayList<String>(dupMap.values()); 

for (String src : uniqueList) {
    Matcher m = p.matcher(src); 
    if( m.find() && m.groupCount() >= 3) {
        String firstValue = m.group(1); // value to left of :
        String secondValue = m.group(2); // value between : and -
        String thirdValue = m.group(3); // value after -

        // assign to arraylists here
    }
}

私は実際に特定ArrayListの s に追加するコードを入れませんでした。なぜなら、ArrayListどの値を保持するはずだったコードからはよく分からなかったからです。

編集

Code-Guru のコメントによると、使用する実装String.split()は次のようになります。

String pattern = "[:\\-]";

// I assume this holds all the values:
List<String> uniqueList = new ArrayList<String>(dupMap.values()); 

for (String src : uniqueList) {
    String[] parts = src.split(pattern);
    if (parts.length == 3) {
        String firstValue = parts[1]; // value to left of :
        String secondValue = parts[2]; // value between : and -
        String thirdValue = parts[3]; // value after -

        // assign to arraylists here
    }
}

どちらのアプローチも、効率という点ではほとんど同じです。

于 2012-08-29T18:57:26.113 に答える
0

あなたの質問について私が理解していることから、私は次のように進めます:

for each String in uniqueList
    parse the string into a character and two integers (probably using a single call to [String.split()](http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#split(java.lang.String, int))
    insert the first integer into an List
    insert the second integer into another List

これは疑似コードです。Java への変換は、読者の課題として残されています。

于 2012-08-29T19:00:54.223 に答える