麻烦使用转义字符'{'

时间:2018-05-14 08:50:13

标签: java arraylist escaping

在我的书中,它要求我设计一个简单的程序,使用行尾括号样式将.java文件转换为具有新行括号样式的新.java文件。我需要找到哪些行以'{'结尾。我读到我需要在'{'之前使用两个反斜杠而不仅仅是{因为它是java中的一个转义字符。

这就是我所拥有的:

public class BraceConverter {

public static void main(String[] args) throws Exception {
    File sourceFile = new File(args[0]);
    File newFile = new File(args[1]);

    if (args.length != 2) {
        System.err.println("Error: 2 arguments are required for the program to be executed");
    }
    else if (!sourceFile.exists()) {
        System.err.println("Error: source file " + args[0] + " does not exist.");
    }
    else {
        ArrayList<String> newProgramLines = new ArrayList<>();
        int i = 0;
        try(Scanner input = new Scanner(sourceFile);
            PrintWriter output = new PrintWriter(newFile)) {
            while(input.hasNext()) {
                newProgramLines.add(input.nextLine());
                if (newProgramLines.get(i).endsWith("\\{")) {
                        newProgramLines.set(i, newProgramLines.get(i).replaceAll("{", ""));
                        newProgramLines.add("{");
                        i++;
                }
                i++;
            }

            for(String x: newProgramLines) {
                output.println(x);
            }
        }

    }

  }     

}

然而程序无效,当我使用调试器执行它时,if语句:

if (newProgramLines.get(i).endsWith("\\{")) <---I actually have 2 backslashes in my code not sure why it can only show one backslash on here
即使特定索引处的数组以{结尾,

总是被评估为false。

如果不是放入2个反斜杠后跟{,而是放“;”在方法中,它没有问题地评估为true。那么为什么使用2个反斜杠后跟{评估为false,当行中的最后一个字符是'{'时,如何解决此问题以返回true。

2 个答案:

答案 0 :(得分:0)

  1. 对于endsWith(String suffix),后缀是基本的String,不需要espace:

    if (newProgramLines.get(i).endsWith("{")) {
    
    1. 对于replaceAll(String regex, String repl),有一个regex所以你需要使用\(Java警告你作为悬空元字符)进行转义,在Java中你需要escpace反斜杠,所以需要2

      newProgramLines.set(i, newProgramLines.get(i).replaceAll("{", ""));
      

答案 1 :(得分:0)

.endsWith("\\{")

仅对以

结尾的字符串返回true
\{

反斜杠是一个转义字符,但是通过使用双反斜杠,你可以逃避反斜杠。 '{'不需要转义。

仅使用

.endsWith("{")

应该可以正常工作