我在扫描仪中使用分隔符时遇到问题。我目前正在使用扫描仪读取文本文件并将令牌放入字符串中。我的导师告诉我使用分隔符(useDelimiter(“\ t | \ n”))。但是它抓取的每个标记都以/ r结尾(由于文本文件中的返回)。这适用于打印目的,但我需要获取字符串长度。而不是返回实际字符的数量,它返回包括/ r的字符数。有没有更好的分隔符,我可以使用它将完成相同的事情(没有抓住/ r)?代码如下:
studentData.useDelimiter("\t|\n");
while (studentData.hasNext())
{
token = studentData.next();
int tokenLength = token.length();
statCalc(tokenLength);
}
我很清楚我可以简单地删除字符串标记的最后一个字符。但是,由于很多原因,我只想让它在没有/ r的情况下获取令牌。任何和所有的帮助将不胜感激。
答案 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。