我有一个这样的字符串:
1 | 2 | 3 | 4 | 5 | 6 | 7 | | | | | | | |
字符串也可能包含更多/更少的数据。
我需要删除|
并逐个获取数字。
答案 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);
}