我承认,不是最好的头衔。
我遇到以下问题。我需要使用扫描仪并解析每个单词(不包含定界符)以分隔字符串。
示例:Poker; Blackjack; LasVegas, NewYork
至Poker
Blackjack
LasVegas
NewYork
现在,对于第一部分,我将使用这样的分隔符:sc.useDelimiter("; ")
可以正常工作。
第二部分是我遇到麻烦的地方。如果在完成二十一点后切换到sc.useDelimiter(", ")
,我仍将包含第一个;
和一个空格,以便字符串输出; LasVegas
。
我尝试通过首先重置定界符并吃掉第一个标记来解决它,这是解决该问题的一种不好的方法,但随后该字符串仍会变成"whitespace"LasVegas
而不是LasVegas
。
非常感谢您的帮助。
最佳答案
有多种处理方法,具体取决于您的实际要求1:
不要更改定界符。 "Blackjack"
之后的令牌将是"LasVegas, NewYork to Poker Blackjack LasVegas NewYork"
。创建另一个扫描器以解析该令牌。 (或使用String::split
。)
使用可以与任一分隔符匹配的分隔符正则表达式;例如"[;,]\\s*"
。
像这样解析:
String line = scanner.nextLine();
String[] parts = line.split(";\\s*");
String[] parts2 = parts[2].split(",\\s*");
假定
;
是主要定界符,而,
是次要定界符。更改输入文件的语法,使其仅使用一个定界符。 (这假设您可以自由地这样做,并且其他语法将“更有意义”。)
1-显然,我们无法从单行输入中推断出您要解析的文件的语法。或者,通常从单个示例输入文件中获取。