如何计算 Java 文本文件中的括号和花括号?
How do I count parenthesis and curly brackets in a text file in Java?
我正在尝试计算程序在文本文档中找到的子字符串的数量。文本文档:
# Data Value 0:
dataValue(0) {
x: -3
y: +9
width: 68
height: 25
}
在我的程序中,我试图打印 'dataValue(' 出现的次数。我在括号方面遇到了麻烦。根据我在寻找解决方案时发现的内容,我必须避开括号。这个对吗?但是,我发现当我这样做时,程序将其解释为 'dataValue\(' 而不是 'dataValue('。结果,找不到匹配项。我可以解决这个问题吗?如果是这样,我们将不胜感激。
主要方法:
static String fileContent = "";
public static void main(String args[]) {
fileContent = getFileContent("/Users/Rane/Desktop/search.txt");
System.out.println(countSubstring(fileContent, "dataValue\("));
}
getFileContent() 方法:
public static String getFileContent(String filePath) {
File textFile = new File(filePath);
BufferedReader reader = null;
String content = "";
String currentLine = "";
if(textFile.exists()) {
try {
reader = new BufferedReader(new FileReader(textFile));
currentLine = reader.readLine();
while(currentLine != null) {
content = content + currentLine + "\n";;
currentLine = reader.readLine();
}
} catch(Exception ext) {
ext.printStackTrace();
} finally {
try {
reader.close();
} catch(Exception ext) {
ext.printStackTrace();
}
}
} else {
System.out.println("[WARNING]: Text file was not found at: " + filePath);
}
return content;
}
countSubstring() 方法:
static int countSubstring(String search, String substring) {
int occurrences = 0;
System.out.println(substring);
search = search.toLowerCase();
substring = substring.toLowerCase();
while(search.indexOf(substring) > -1) {
search = search.replaceFirst(substring, "");
occurrences ++;
}
return occurrences;
}
控制台输出:
dataValue\(
0
提前致谢!
对于indexOf
,不需要转义(
。与其他一些方法不同,indexOf
接受字符串作为参数而不是正则表达式。
另请注意,如果您只是想数数,则需要更改此设置:
while(search.indexOf(substring) > -1) {
search = search.replaceFirst(substring, "");
occurrences ++;
}
收件人:
int index = -1;
while((index = search.indexOf(substring, ++index)) > -1)
occurances++;
indexOf
生成所提供子字符串的位置。我们正在使用一个重载版本,它也从哪里开始匹配。我们需要这样做,以避免不断找到相同的元素,从而使其成为无限循环。
那是因为您混用了搜索字符串:
indexOf()
采用普通搜索字符串
replaceFirst()
接受正则表达式
如果您只想提供一个纯字符串,您可以使用 Pattern.quote()
.
引用该字符串作为正则表达式使用
更好的是,不要浪费时间替换搜索字符串,只需继续搜索,使用 indexOf()
进行简单搜索字符串,或使用 find()
进行正则表达式:
// Using indexOf() with a plain search string
int start = -1, count = 0;
while ((start = search.indexOf(substring, ++start)) != -1)
count++;
return count;
// Using find() with a regular expression search string
Matcher m = Pattern.compile(substring).matcher(search);
int count = 0;
while (m.find())
count++;
return count;
我正在尝试计算程序在文本文档中找到的子字符串的数量。文本文档:
# Data Value 0:
dataValue(0) {
x: -3
y: +9
width: 68
height: 25
}
在我的程序中,我试图打印 'dataValue(' 出现的次数。我在括号方面遇到了麻烦。根据我在寻找解决方案时发现的内容,我必须避开括号。这个对吗?但是,我发现当我这样做时,程序将其解释为 'dataValue\(' 而不是 'dataValue('。结果,找不到匹配项。我可以解决这个问题吗?如果是这样,我们将不胜感激。
主要方法:
static String fileContent = "";
public static void main(String args[]) {
fileContent = getFileContent("/Users/Rane/Desktop/search.txt");
System.out.println(countSubstring(fileContent, "dataValue\("));
}
getFileContent() 方法:
public static String getFileContent(String filePath) {
File textFile = new File(filePath);
BufferedReader reader = null;
String content = "";
String currentLine = "";
if(textFile.exists()) {
try {
reader = new BufferedReader(new FileReader(textFile));
currentLine = reader.readLine();
while(currentLine != null) {
content = content + currentLine + "\n";;
currentLine = reader.readLine();
}
} catch(Exception ext) {
ext.printStackTrace();
} finally {
try {
reader.close();
} catch(Exception ext) {
ext.printStackTrace();
}
}
} else {
System.out.println("[WARNING]: Text file was not found at: " + filePath);
}
return content;
}
countSubstring() 方法:
static int countSubstring(String search, String substring) {
int occurrences = 0;
System.out.println(substring);
search = search.toLowerCase();
substring = substring.toLowerCase();
while(search.indexOf(substring) > -1) {
search = search.replaceFirst(substring, "");
occurrences ++;
}
return occurrences;
}
控制台输出:
dataValue\(
0
提前致谢!
对于indexOf
,不需要转义(
。与其他一些方法不同,indexOf
接受字符串作为参数而不是正则表达式。
另请注意,如果您只是想数数,则需要更改此设置:
while(search.indexOf(substring) > -1) {
search = search.replaceFirst(substring, "");
occurrences ++;
}
收件人:
int index = -1;
while((index = search.indexOf(substring, ++index)) > -1)
occurances++;
indexOf
生成所提供子字符串的位置。我们正在使用一个重载版本,它也从哪里开始匹配。我们需要这样做,以避免不断找到相同的元素,从而使其成为无限循环。
那是因为您混用了搜索字符串:
indexOf()
采用普通搜索字符串replaceFirst()
接受正则表达式
如果您只想提供一个纯字符串,您可以使用 Pattern.quote()
.
更好的是,不要浪费时间替换搜索字符串,只需继续搜索,使用 indexOf()
进行简单搜索字符串,或使用 find()
进行正则表达式:
// Using indexOf() with a plain search string
int start = -1, count = 0;
while ((start = search.indexOf(substring, ++start)) != -1)
count++;
return count;
// Using find() with a regular expression search string
Matcher m = Pattern.compile(substring).matcher(search);
int count = 0;
while (m.find())
count++;
return count;