如何拆分此字符串(Java)?

时间:2016-04-07 01:33:04

标签: java string split

我想拆分字符串String line = "20E WED 01PM 0E";,以便每个“部分”都有变量,其中部分看起来像:

int fDegree = 20;
String fDegreeEW = "E";
String day = "WED";
int time = 01;   \\ '1' is fine too
String amPm = "PM";
int sDegree = 0;
String sDegreeEW = "E";

我在考虑首先在空格处分割字符串line,然后在每个部分上执行regex以获取数据,但我无法使其工作。将像这样的字符串拆分成一堆不同变量的最好方法是什么?注意:这不是我想要检查的唯一字符串。例如,第一个“20”也可以是“1”或“165”,因此单词和数字不一定具有设定长度。但数字,单词,空格,单词,空格,数字,单词,空格,数字,单词的模式总是如此。

编辑:我试过了:

String line = "20E WED 01PM 0E";
String[] splitArray = line.split(" ");
Scanner scanner = new Scanner(splitArray[0]);
int fDegree = scanner.nextInt();

但扔了InputMismatchException。我可以在这里使用扫描仪吗?

3 个答案:

答案 0 :(得分:4)

这个正则表达式会这样做:

self.automaticallyAdjustsScrollViewInsets = false

请参阅regex101 for demo(查看"匹配信息"右侧窗格)。

以下是如何编码:

(\d+)(\w+)\s+(\w+)\s+(\d+)(\w+)\s+(\d+)(\w+)

模式变量Pattern p = Pattern.compile("(\\d+)(\\w+)\\s+(\\w+)\\s+(\\d+)(\\w+)\\s+(\\d+)(\\w+)"); String line = "20E WED 01PM 0E"; Matcher m = p.matcher(line); if (! m.matches()) throw new IllegalArgumentException("Bad input: " + line); int fDegree = Integer.parseInt(m.group(1)); String fDegreeEW = m.group(2); String day = m.group(3); int time = Integer.parseInt(m.group(4)); String amPm = m.group(5); int sDegree = Integer.parseInt(m.group(6)); String sDegreeEW = m.group(7); 可以重复用于每一行。

答案 1 :(得分:3)

Johnny对于扫描仪是正确的,但您还应该考虑如何输入数据。如果您将模式设置为设定长度,则拆分此信息会容易得多。

例如,如果输入的行为“020 E WED 13 000 E”,那么您需要做的就是根据标记“”(空格)进行拆分。然后你会得到一个三位数的学位,你的主要方向,一天,一个24小时制的下午一点(13),另一个三位数的学位(我假设你永远不会超过360),另一个主要方向。

如果您需要将此信息保存在数据结构(如数组)中以供日后使用,可以使用line.split()或StringTokenizer。

答案 2 :(得分:1)

你不要那样使用扫描仪。扫描仪通常用于让用户向系统输入值。如果你想打印出所有价值我建议:

String line = "20E WED 01PM 0E";
String[] splitted = line.split(" ");
for(int i = 0; i < splitted.length(); i++){
System.out.println(splitted[i]);
}