我想拆分字符串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
。我可以在这里使用扫描仪吗?
答案 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]);
}