字符串标记以删除一些数据

时间:2012-10-15 11:41:47

标签: java string string-parsing

我有一个这样的字符串:

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

字符串也可能包含更多/更少的数据。 我需要删除|并逐个获取数字。

8 个答案:

答案 0 :(得分:2)

Guava的Splitter岩石!

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);

答案 1 :(得分: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();
    }
}

答案 2 :(得分:0)

你走了:

String str = "1 | 2 | 3 | 4 | 5 | 6 | 7 | | | | | | | |".replaceAll("\\|", "").replaceAll("\\s+", "");

答案 3 :(得分: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

答案 4 :(得分:0)

inputString.split("\\s*\\|\\s*")会给你一个数字数组作为字符串。然后你需要解析数字:

final List<Integer> ns = new ArrayList<>();
for (String n : input.split("\\s*\\|\\s*"))
  ns.add(Integer.parseInt(n);

答案 5 :(得分: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]

答案 6 :(得分: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
   }
}

答案 7 :(得分: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);
}