分隔符问题(“\ t | \ n”)Java

时间:2016-10-11 18:53:41

标签: java

我在扫描仪中使用分隔符时遇到问题。我目前正在使用扫描仪读取文本文件并将令牌放入字符串中。我的导师告诉我使用分隔符(useDelimiter(“\ t | \ n”))。但是它抓取的每个标记都以/ r结尾(由于文本文件中的返回)。这适用于打印目的,但我需要获取字符串长度。而不是返回实际字符​​的数量,它返回包括/ r的字符数。有没有更好的分隔符,我可以使用它将完成相同的事情(没有抓住/ r)?代码如下:

 studentData.useDelimiter("\t|\n");
   while (studentData.hasNext())
   {
       token = studentData.next();
       int tokenLength = token.length();
       statCalc(tokenLength);
   }

我很清楚我可以简单地删除字符串标记的最后一个字符。但是,由于很多原因,我只想让它在没有/ r的情况下获取令牌。任何和所有的帮助将不胜感激。

3 个答案:

答案 0 :(得分:2)

试试这个:

studentData.useDelimiter("\\t|\\R");

\R模式与任何换行符匹配,请参阅documentation

我想剩下的\r字符是Windows环境中部分消耗的换行符。使用上述分隔符,扫描仪将正确使用该线路。

答案 1 :(得分:0)

替换字符串中的所有Carriage和form return。试试这个

s = s.replaceAll("\\n", "");
s = s.replaceAll("\\r", "");

答案 2 :(得分:0)

Windows样式的行结尾通常是:\ r \ n但你忽略\ r作为分隔符。您的正则表达式模式(\ t | \ n)可以通过使用:

来改进

(\t|\r\n|\r|\n)

然而,在我看来,你想要完成的是创建一个" tokenizer"这会将文本文件分解为单词(因为您也在寻找\ t)所以我的猜测是您更好地使用:

studentData.useDelimiter("\\s*");

将考虑任何空白区域。

您可以详细了解regular expressions