我有以下形式的字符串:
"abc" 1 2 1 13
"efgh" 2 5
基本上,引号中的字符串后跟由空格字符分隔的数字。 我需要提取字符串和数字。
所以对于例如,对于第一行,我想要
abc
存储在String
变量中(即没有引号)和int
的{{1}}数组。我试图创建一个这样做的模式,但我有点困惑。
[1,2,1,13]
现在不确定如何继续。我意识到,有了这种模式,我有点想要提取整条线路吗?也许多种模式会有所帮助吗?
Pattern P = Pattern.compile("\A\".+\"(\s\d+)+");
同样,不太确定如何将字符串和整数排除在外。任何帮助表示赞赏!
答案 0 :(得分:1)
我宁愿将字符串拆分为空格,而不是构建复杂的正则表达式,并将其与Pattern
和Matcher
类一起使用。
这样的事情: -
String str = "\"abc\" 1 2 1 13 ";
String[] arrr = str.split("\\s");
System.out.println(Arrays.toString(arrr));
输出: -
["abc", 1, 2, 1, 13]
显示你的意图更清楚,你想要做什么。
然后,您可以从字符串数组中获取string
和integer
部分。您需要对整数元素执行Integer.parseInt()
。
如果您的字符串中可能包含空格,那么在这种情况下,您需要Regex
。更好的是@m.buettner's
answer
答案 1 :(得分:1)
使用捕获组一次性获取两个部分,然后在空格处分割数字。
Pattern pattern = Pattern.compile("\"([^\"]*)\"\\s*([\\d\\s]*)");
Matcher m = pattern .matcher(input);
while (m.find()) {
String str = m.group(1);
String[] numbers = m.group(2).split("\\s");
// process both of them
}
正则表达式中的每组括号稍后将对应一个group
(从左到右计算左括号,从1
开始)。
答案 2 :(得分:0)
请尝试将它分开String和int
String s = "\"abc\" 1 2 1 13 ";
s = s.replace("\"", "");
String sarray[] = s.split(" ");
int i[] = new int[10];
String si[] = new String[10];
int siflag = 0;
int iflag = 0;
for (String st : sarray) {
try {
int ii = Integer.parseInt(st)
i[iflag++] = ii;
} catch (NumberFormatException e) {
si[siflag++] = st;
}
}
答案 3 :(得分:0)
StringTokenizer st = new StringTokenizer(str,"\" ");
String token = null;
String strComponent = null;
int num[] = new int[10]; // can change length dynamically by using ArrayList
int i = 0;
int numTemp = -1;
while(st.hasMoreTokens()){
token = st.nextToken();
try{
numTemp = Integer.parseInt(token);
num[i++] = numTemp ;
}catch(NumberFormatException nfe){
strComponent = token.toString();
}