String regex = ".*[,,‘’''“”\"].*"; String size = "2XL‘’\"'\",,\n"; System.out.println(size.matches(regex));为什么输出false
时间: 2023-09-30 22:06:11 浏览: 124
这是因为你的正则表达式 `.*[,‘’''“”\"].*`含了 `.*`,这可以匹配任意字符(除了换行符)任意次数。而 `matches` 方法要求整个字符串完全匹配正则表达式,即整个字符串需要满足正则表达式的模式。
在你的示例中,`size` 的值为 `"2XL‘’\"'\",,\n"`,其中包含了需要匹配的字符。但是 `matches` 方法会检查整个字符串,包括最后的换行符 `\n`,而你的正则表达式并不包含换行符,所以最终返回了 `false`。
如果你想要匹配的字符串可以包含换行符,可以修改正则表达式为 `(?s).*[,,‘’''“”\"].*`,其中 `(?s)` 表示开启 DOTALL 模式,使得 `.` 可以匹配任意字符(包括换行符)。修改后的代码如下:
```java
String regex = "(?s).*[,,‘’''“”\"].*";
String size = "2XL‘’\"'\",,\n";
System.out.println(size.matches(regex)); // 输出 true
```
这样修改后,`matches` 方法就会返回 `true`。
相关问题
import java.util.regex.*; public class E { public static void main(String args[ ]) { String s = "登陆www.tup.com.cn,输入耿祥义可查询全部作者教材,欢迎您登陆"; String regex = "登陆"; Pattern p =Pattern.compile(regex); Matcher m =p.matcher(s); s = m.replaceAll("登录"); regex = "登录"; p =Pattern.compile(regex); m =p.matcher(s); int count =0; String item =""; while(m.find()) { item = m.group(); count ++; } System.out.printf("%d:%s",count,item); }
这是一个Java程序,它使用正则表达式将字符串中的“登陆”替换为“登录”,并统计替换后的字符串中“登录”出现的次数和最后一次出现的位置。
具体来说,这个程序的输出结果为:
```
2:登录
```
程序的具体实现如下:
```java
import java.util.regex.*;
public class E {
public static void main(String args[]) {
String s = "登陆www.tup.com.cn,输入耿祥义可查询全部作者教材,欢迎您登陆";
String regex = "登陆";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(s);
s = m.replaceAll("登录"); // 将所有匹配到的 "登陆" 替换为 "登录"
regex = "登录";
p = Pattern.compile(regex);
m = p.matcher(s);
int count = 0;
String item = "";
while (m.find()) { // 查找所有匹配到的 "登录",并统计数量和最后一次出现的位置
item = m.group();
count++;
}
System.out.printf("%d:%s", count, item); // 输出结果
}
}
```
其中,`Pattern.compile()` 方法和 `Matcher` 类的使用方法在上一个问题中已经解释过了。`m.replaceAll()` 方法将所有匹配到的字符串替换为指定的字符串,最后用 `while (m.find())` 循环统计匹配到的字符串数量和最后一次出现的位置,最终输出结果。
补全代码:nalysisResult.javaimport java.io.*;import java.util.*;public class AnalysisResult { public static void main(String args[]) { //使用循环按行读取文件 //调用Fenxi.getTotalScore()获取解析出的总成绩,并写入scoreAnalysis.txt中 }}Fenxi.javaimport java.util.*;public class Fenxi { public static double getTotalScore(String s) { String regex="[^0123456789]" ; //匹配非数字的正则表达式 String digitMess=s.replaceAll(regex,"*"); StringTokenizer fenxi = new StringTokenizer(digitMess,"*"); double totalScore=0; while(fenxi.hasMoreTokens()){ double score = Double.parseDouble(fenxi.nextToken()); //累加 totalScore } return totalScore; }}
import java.io.*;
import java.util.*;
public class AnalysisResult {
public static void main(String args[]) {
try {
File file = new File("score.txt");
FileReader fileReader = new FileReader(file);
BufferedReader bufferedReader = new BufferedReader(fileReader);
String line;
double totalScore = 0;
while ((line = bufferedReader.readLine()) != null) {
totalScore += Fenxi.getTotalScore(line);
}
bufferedReader.close();
FileWriter fileWriter = new FileWriter("scoreAnalysis.txt");
fileWriter.write("总成绩:" + totalScore);
fileWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
import java.util.*;
public class Fenxi {
public static double getTotalScore(String s) {
String regex = "[^0123456789]";
String digitMess = s.replaceAll(regex, "*");
StringTokenizer fenxi = new StringTokenizer(digitMess, "*");
double totalScore = 0;
while (fenxi.hasMoreTokens()) {
double score = Double.parseDouble(fenxi.nextToken());
totalScore += score;
}
return totalScore;
}
}
阅读全文