0

我有一个这样的字符串:

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

字符串也可能有更多/更少的数据。我需要|一一删除并只获取数字。

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可能会更有效,但由于无论如何您都必须进行所有修剪和检查空字符串,我认为它可能会平局。

关于 的一条评论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 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

或者使用 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 回答
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

您可以将 split 与以下正则表达式一起使用(允许额外的空格、制表符和空存储桶):

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 回答