西西河

主题:【求助】问个弱智Java问题 -- cartman

共:💬8 🌺2 新:
全看树展主题 · 分页首页 上页
/ 1
下页 末页
家园 【求助】问个弱智Java问题

我想读一个文件时跳过加号开始的行

if (myScanner.hasNext("^\\+.*"))

{

//skip

}

可怎么就匹配不上呢?hasNext()的正则表达式好像很诡异。

家园 pattern不对
家园 不行

没用。不是逻辑的问题。无论"^[\\+].*$","^[^\\+].*$"都不行。有人说是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();

}

家园 补充及修正。。汗。。。

经过尝试,发现hasNext()或者hasNextLine(0或者hasNext(pattern)等不能在next()前连用。否则会导致Scanner无限读取。。。while循环无法停止。。。

突然想起来,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();

}

家园 多谢多谢

送花一朵儿

全看树展主题 · 分页首页 上页
/ 1
下页 末页


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河