在我的书中,它要求我设计一个简单的程序,使用行尾括号样式将.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。
答案 0 :(得分:0)
对于endsWith(String suffix)
,后缀是基本的String
,不需要espace:
if (newProgramLines.get(i).endsWith("{")) {
对于replaceAll(String regex, String repl)
,有一个regex
所以你需要使用\
(Java警告你作为悬空元字符)进行转义,在Java中你需要escpace反斜杠,所以需要2
newProgramLines.set(i, newProgramLines.get(i).replaceAll("{", ""));
答案 1 :(得分:0)
.endsWith("\\{")
仅对以
结尾的字符串返回true\{
反斜杠是一个转义字符,但是通过使用双反斜杠,你可以逃避反斜杠。 '{'不需要转义。
仅使用
.endsWith("{")
应该可以正常工作