我承认,不是最好的头衔。

我遇到以下问题。我需要使用扫描仪并解析每个单词(不包含定界符)以分隔字符串。

示例:Poker; Blackjack; LasVegas, NewYorkPoker 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-显然,我们无法从单行输入中推断出您要解析的文件的语法。或者,通常从单个示例输入文件中获取。

10-08 20:11