- 程序有所改变。发帖如还有问题请报告
- 【征集】西西河的经济学,及清流措施,需要主动参与者,『稷下学宫』新认证方式,24年网站打算和努力目标
主题:【求助】问个弱智Java问题 -- cartman
我想读一个文件时跳过加号开始的行
{
//skip
}
可怎么就匹配不上呢?hasNext()的正则表达式好像很诡异。
没用。不是逻辑的问题。无论"^[\\+].*$","^[^\\+].*$"都不行。有人说是scanner实际上停在了上一行的末尾
try
{
File file = new File(fileName);
Scanner scanner = new Scanner(file);
while (true)
{
if (scanner.hasNext("(?=^+)..*"))
{
System.out.println(scanner.next());
}
else
{
System.out.println("noMore");
break;
}
}
scanner.close();
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
但还是只有第一行管用。不过我发现可以使用"\\G"代替"^"或者使用multiline mode
不好意思第一次用scanner,没验证清除就发上来误事
经过尝试,发现hasNext()或者hasNextLine(0或者hasNext(pattern)等不能在next()前连用。否则会导致Scanner无限读取。。。while循环无法停止。。。
新的code在下面:
try
{
File file = new File(fileName);
Scanner scanner = new Scanner(file);
String tmp;
scanner.useDelimiter("[\\p{javaWhitespace}&&[^ ]]+");
while (scanner.hasNextLine())
{
tmp = scanner.next();
if (tmp.matches("(?=^\\+)..*"))
{
System.out.println(tmp);
}
}
scanner.close();
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
突然想起来,next()是取出,凡是带has的都不取出。我的循环里面如果has...为否,就直接进行下一次认证了。所以才导致无限循环的。
如果无论是否与reg exp匹配都取出字串,就正常了。
另一个版本:
try
{
File file = new File(fileName);
Scanner scanner = new Scanner(file);
// String tmp;
scanner.useDelimiter("[\\p{javaWhitespace}&&[^ ]]+");
while (scanner.hasNext())
{
// tmp = scanner.next();
// if (tmp.matches("(?=^\\+)..*"))
// {
// System.out.println(tmp);
// }
if (scanner.hasNext("(?>-)..*"))
{
System.out.println(scanner.next());
}
else
{
System.out.println("Reg Exp Not Foundin seq: " + scanner.next());
}
}
scanner.close();
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
送花一朵儿