0

次のような文字列があります。

1 | 2 | 3 | 4 | 5 | 6 | 7 |  |  |  |  |  |  |  |

文字列には、より多くの/より少ないデータも含まれる場合があります。|数字だけを1つずつ削除して取得する必要があります。

4

8 に答える 8

2

グアバのスプリッターロックス!

String input = "1 | 2 | 3 | 4 | 5 | 6 | 7 | | | | | | | |";
Iterable<String> entries = Splitter.on("|")
        .trimResults()
        .omitEmptyStrings()
        .split(input);

そして、あなたが本当に派手になりたいなら:

Iterable<Integer> ints = Iterables.transform(entries, 
     new Function<String, Integer>(){
        Integer apply(String input){
           return Integer.parseInt(input);
        }
 });

間違いなく正規表現メソッドまたは String.split を使用できますが、使用した方Splitterがエラーが発生しにくく、読みやすく保守しやすいと思います。その方が効率的かもしれないと主張することもできString.splitますが、とにかくすべてのトリミングと空の文字列のチェックを行う必要があるため、おそらく均等になると思います.

についての 1 つのコメントはtransform、必要に応じて計算を行いますが、これは素晴らしいことですが、同じ要素に対して変換が複数回行われる可能性があることも意味します。したがって、すべての計算を一度に実行するには、このような方法をお勧めします。

Function<String, Integer> toInt = new Function...
Iterable<Integer> values = Iterables.transform(entries, toInt);
List<Integer> valueList = Lists.newArrayList(values);
于 2012-10-15T11:44:28.667 に答える
1

Scannerを使用して試すことができます:

Scanner sc = new Scanner(myString);
sc.useDelimiter("|");
List<Integer> numbers = new LinkedList<Integer>();
while(sc.hasNext()) {
    if(sc.hasNextInt()) {
        numbers.add(sc.nextInt());
    } else {
        sc.next();
    }
}
于 2012-10-15T11:45:05.797 に答える
0

どうぞ:

String str = "1 | 2 | 3 | 4 | 5 | 6 | 7 | | | | | | | |".replaceAll("\\|", "").replaceAll("\\s+", "");
于 2012-10-15T11:45:29.957 に答える
0

好きということですか?

String s = "1 | 2 | 3 | 4 | 5 | 6 | 7 | | | | | | | |";
for(String n : s.split(" ?\\| ?")) {
    int i = Integer.parseInt(n);
    System.out.println(i);
}

版画

1
2
3
4
5
6
7
于 2012-10-15T11:45:33.113 に答える
0

inputString.split("\\s*\\|\\s*")数値の配列を文字列として提供します。次に、数値を解析する必要があります。

final List<Integer> ns = new ArrayList<>();
for (String n : input.split("\\s*\\|\\s*"))
  ns.add(Integer.parseInt(n);
于 2012-10-15T11:45:44.017 に答える
0

次の正規表現で分割を使用できます (余分なスペース、タブ、および空のバケットを許可します)。

String input = "1 | 2 | 3 | 4 | 5 | 6 | 7 | | | | | | | | ";
String[] numbers = input.split("([\\s*\\|\\s*])+");
System.out.println(Arrays.toString(numbers));

出力:

[1、2、3、4、5、6、7]

于 2012-10-15T11:45:51.330 に答える
0

または、Java オンボード メソッドを使用する場合:

String[] data="1 | 2 | 3 | 4 | 5 | 6 | 7 | | | | | | | |".split("|");

for(String elem:data){
   elem=elem.trim();
   if(elem.length()>0){
      // do someting
   }
}
于 2012-10-15T11:47:27.280 に答える
0

文字列を区切り記号 | で分割します。次に、配列を解析します。

このようなことをする必要があります:

String test = "|1|2|3";
String delimiter = "|";
String[] testArray = test.split(delimiter);
List<Integer> values = new ArrayList<Integer>();
for (String string : testArray) {
    int number = Integer.parseInt(string);
    values.add(number);
}
于 2012-10-15T11:47:40.710 に答える