java - 如何计算 Java 文本文件中的括号和大括号?

标签 java escaping substring

我正在尝试计算程序在文本文档中找到的子字符串的数量。文本文档:

# 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 生成所提供子字符串的位置。我们正在使用一个重载版本,它也从哪里开始匹配。我们需要这样做,以避免不断找到相同的元素,从而使其成为无限循环。

关于java - 如何计算 Java 文本文件中的括号和大括号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34550154/

相关文章:

java - Websocket 无法建立连接

mysql - 从 mySQL 中的数据中修剪字符

java - 替换子字符串的优雅解决方案

string - 在两个子字符串之间查找字符串

Java:将转义字符读取为 '\' 后跟一个字符?

python - 我可以在 Linux 中写一个包含路径分隔符的文件名吗?

java - RAD IDE 中的 @override 错误 - 编译器 1.6

java - 尝试每 24 小时调用一次函数

java - 应用多个方面是否安全?

linux - 空间是否被视为 Bash 中的元字符?