我试图分解一个非常简单的字符串集合,这些字符串以
的形式出现0|0
10|15
30|55
等等。基本上由管道分隔的数字。
当我使用带有.split(“|”)的java字符串拆分函数时。我得到了一些不可预知的结果。第一个插槽中的空白区域,有时数字本身并不是我认为应该的位置。
有人可以帮忙并就如何使用reg exp来保持整数来提供建议吗?
我被要求提供试图进行实际拆分的代码。所以请允许我这样做,希望进一步澄清我的问题:)
String temp = "0|0";
String splitString = temp.split("|");
结果
\n
0
|
0
我想要
0
0
只。永远感激任何提前帮助:)
答案 0 :(得分:7)
我仍然建议使用split()
,默认情况下会跳过空令牌。你想摆脱字符串中的非数字字符,只保留管道和数字,然后你可以轻松地使用split()
来获得你想要的东西。或者您可以传递多个分隔符进行拆分(以正则表达式的形式),这应该有效:
String[] splited = yourString.split("[\\|\\s]+");
和正则表达式:
import java.util.regex.*;
Pattern pattern = Pattern.compile("\\d+(?=([\\|\\s\\r\\n]))");
Matcher matcher = pattern.matcher(yourString);
while (matcher.find()) {
System.out.println(matcher.group());
}
答案 1 :(得分:7)
管道符号在正则表达式中是特殊的(它标记替代品),您需要将其转义。根据您使用的Java版本,这可以很好地解释您的不可预测的结果。
class t {
public static void main(String[]_)
{
String temp = "0|0";
String[] splitString = temp.split("\\|");
for (int i=0; i<splitString.length; i++)
System.out.println("splitString["+i+"] is " + splitString[i]);
}
}
输出
splitString[0] is 0
splitString[1] is 0
请注意,一个反斜杠是regexp转义字符,但由于反斜杠也是java源代码中的转义字符,因此需要其中两个将反斜杠推入正则表达式。
答案 2 :(得分:4)
您可以替换管道的空白区域并将其拆分。
String test = "0|0 10|15 30|55";
test = test.replace(" ", "|");
String[] result = test.split("|");
希望这对你有帮助..
答案 3 :(得分:3)
您可以使用StringTokenizer。
String test = "0|0";
StringTokenizer st = new StringTokenizer(test);
int firstNumber = Integer.parseInt(st.nextToken()); //will parse out the first number
int secondNumber = Integer.parseInt(st.nextToken()); //will parse out the second number
当然,如果你有多个字符串,你总是可以将它嵌套在while循环中。
此外,您需要导入java.util。*才能使其正常工作。
答案 4 :(得分:2)
管道('|')是regular expressions中的特殊字符。如果你想将它作为常规字符使用,它需要用'\'字符“转义”,不幸的是'\'是Java中的一个特殊字符所以你需要做一种双重逃避操作,例如。
String temp = "0|0";
String[] splitStrings = temp.split("\\|");
答案 5 :(得分:2)
Guava库有一个很好的类Splitter
,它比String.split()
更方便。优点是您可以选择将字符串拆分为特定字符(如“|”),特定字符串或正则表达式,您可以选择如何处理结果部分(修剪它们,抛出空的部分等) )。
例如,您可以致电
Iterable<String> parts = Spliter.on('|').trimResults().omitEmptyStrings().split("0|0")
答案 6 :(得分:0)
这应该适合你:
([0-9]+)
答案 7 :(得分:0)
考虑一种情况,我们以字符串的形式从csv或xls文件中读取一行,并且需要根据分隔符分隔字符串数组中的列。
以下是实现此问题的代码段。
{ ...
....
String line = new BufferedReader(new FileReader("your file"));
String[] splittedString = StringSplitToArray(stringLine,"\"");
...
....
}
public static String[] StringSplitToArray(String stringToSplit, String delimiter)
{
StringBuffer token = new StringBuffer();
Vector tokens = new Vector();
char[] chars = stringToSplit.toCharArray();
for (int i=0; i 0) {
tokens.addElement(token.toString());
token.setLength(0);
i++;
}
} else {
token.append(chars[i]);
}
}
if (token.length() > 0) {
tokens.addElement(token.toString());
}
// convert the vector into an array
String[] preparedArray = new String[tokens.size()];
for (int i=0; i < preparedArray.length; i++) {
preparedArray[i] = (String)tokens.elementAt(i);
}
return preparedArray;
}
上面的代码片段包含对StringSplitToArray的方法调用,其中方法将stringline转换为字符串数组,根据指定的分隔符或传递给方法来分割行。分隔符可以是逗号分隔符(,)或双重代码(&#34;)。
有关详情,请按照link:http://scrapillars.blogspot.in
进行操作