Java 程序中的正则表达式不';行不通
我正在编写一个程序,它将读取一个文本文件,如果文本中有任何不是空格或单词字符的字符,就会抛出一个错误。正则表达式似乎正确,但不起作用 例如,这些文本:Java 程序中的正则表达式不';行不通,java,regex,filereader,Java,Regex,Filereader,我正在编写一个程序,它将读取一个文本文件,如果文本中有任何不是空格或单词字符的字符,就会抛出一个错误。正则表达式似乎正确,但不起作用 例如,这些文本: 哈利波特$ 哈利波特 &&&&&&&&&&&&&&&&&uvuoyvouyvouyv78789***** 在控制台中显示,无错误 我也检查了上的正则表达式 需要Double\是因为otherwis,e I获取错误非法转义字符 import java.io.*; 公共级DZ{ 公共静态void main(字符串[]args)引发IOExcept
哈利波特$
哈利波特
&&&&&&&&&&&&&&&&&uvuoyvouyvouyv78789*****
import java.io.*;
公共级DZ{
公共静态void main(字符串[]args)引发IOException{
试一试{
System.out.println(方法());
}捕获(例外e){
系统输出打印ln(e);
}
}
公共静态布尔比较(char wrt){
字符串str=“[^\\s\\w]”;
对于(int i=0;i
您正在将字符串
与字符
进行比较,并在包含正则表达式的字符串上进行迭代-这没有意义:
public static boolean compare(char wrt){
String str = "[^\\s\\w]";
for(int i=0;i<str.length();i++){ //why are you diong this?
if(str.charAt(i) == wrt) //you are checking every char of the regex agains the input char!
return true;
}
return false;
}
此外,在第一次发现无效字符时,最好停止读取文件。否则,检查每个
char
而不是整个文件内容(如content.matches(“.[^\\s\\w].])是没有意义的
。只抛出一次异常,然后中断;
读取文件的循环!在上面的代码中,您对每个字符进行迭代,相反,您可以使用模式匹配输入文件中的每一行
public static boolean compare(String wrt)
{
Pattern regex = Pattern.compile("[^\\s\\w]");
Matcher matcher = regex.matcher(wrt);
return matcher.find();
}
public static StringBuilder method() throws Exception
{
FileReader fr = new FileReader("/Users/rachel_green/Documents/1.txt");
BufferedReader bR = new BufferedReader(fr);
StringBuilder str = new StringBuilder();
String line;
while ((line = bR.readLine()) != null)
{
if (compare(line))
{
throw new Exception("Wrong file format");
}
else
{
str.append(line);
}
}
return str;
}
希望这有帮助。为什么要迭代正则表达式中的每个字符,并将其与源文本中的字符进行比较?如果(str.charAt(i)=wrt)有什么作用?你为什么这么认为?
可以更改为“[\\S\\W]”
,这将使正则表达式与所有非空格匹配(正如\W
是\S
的子集一样)。请注意[^\\S\\W]
就像不是(\S或\W)
,如果你想使用\S
和\W
的话,根据德摩根定律,应该看起来像不是(\S)而不是(\W)
,所以更像[\S]&[\W]
(我们可以去掉内括号)。[\\W\\S]
代表的是不是(\W)或不是(\S)
。谢谢,这是有效的:)不过我在正则表达式中使用了这个“[^\\W\\S]”。@Pshemo你说得对,谢谢你指出这一点。我应该考虑两次。从答案中删除!
public static boolean compare(String wrt)
{
Pattern regex = Pattern.compile("[^\\s\\w]");
Matcher matcher = regex.matcher(wrt);
return matcher.find();
}
public static StringBuilder method() throws Exception
{
FileReader fr = new FileReader("/Users/rachel_green/Documents/1.txt");
BufferedReader bR = new BufferedReader(fr);
StringBuilder str = new StringBuilder();
String line;
while ((line = bR.readLine()) != null)
{
if (compare(line))
{
throw new Exception("Wrong file format");
}
else
{
str.append(line);
}
}
return str;
}