我仍然处于Java的萌芽阶段,我正试图找出如何提取所有特定值。
这是以长度未知的字符串形式(模式)[A-H][1-8]
例如,如果我的字符串是" F5 F4 E3 "
,我想将F5
分配给变量,将F4
分配给变量,将E3
分配给另一个变量。
或者,如果我的字符串为" A2 "
,我想将A2
分配给变量
我有种感觉,我应该用Array
来存储价值
请注意,在所需图案之间有空格"blankE2blank"
。
到目前为止,这是我的代码:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.Arrays;
public class List {
public static void main(String[] args) {
int i = 0;
char[] Wanted = new char[]{?}; // What should I use here?
Pattern pat = Pattern.compile("\\s*d+\\s*D+\\s*d+");
String Motherstring = " F5 F4 E3 "; // this is just an example but the extraction should work for every string
Matcher m = pat.matcher(Motherstring);
while (pat.find()) {
Wanted[i] = pat; // ?
i++;
}
}
}
答案 0 :(得分:1)
不要使用数组。使用List
。大小是动态的,允许您add
个对象。见:
Pattern pattern = Pattern.compile("[A-H][1-8]");
Matcher matcher = pattern.matcher(" F5 F4 E3 ");
// Create a new list (ArrayList) to store Strings.
ArrayList<String> list = new ArrayList<>();
// For every match of the regexp in the test string:
while (matcher.find())
// Add the match to the list.
list.add(matcher.group());
System.out.println(list);
这是online code demo。 STDOUT打印:
[F5, F4, E3]
答案 1 :(得分:0)
您可以使用\b
锚点。下面是手写的例子,我还没有测试过。它只是表明了这个想法。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.Arrays;
public class List {
public static void main(String[] args) {
int i = 0;
char[] Wanted = new char[3];// Instead of array any dynamic collection should be used here. Since I'm not familiar with Java collections enough, Im leaving array here for correct work
Pattern pat = Pattern.compile("\\b\\w+\\b");
String Motherstring = " F5 F4 E3 ";
Matcher m = pat.matcher(Motherstring);
while (pat.find()) {
Wanted[i]= pat.group();
i++;
}
}
}