无法使用java程序编辑.java文件
我是java的初学者。我有一个字符串替换代码,用户在其中指定文件路径、要替换的字符串和要替换的字符串。代码只适用于.txt或.in文件。但是当我试图编辑一个我打算为其编写代码的.java文件时,它不知何故无法编辑它。有人能告诉我问题到底出在哪里吗?我的代码如下:无法使用java程序编辑.java文件,java,string,file,replace,edit,Java,String,File,Replace,Edit,我是java的初学者。我有一个字符串替换代码,用户在其中指定文件路径、要替换的字符串和要替换的字符串。代码只适用于.txt或.in文件。但是当我试图编辑一个我打算为其编写代码的.java文件时,它不知何故无法编辑它。有人能告诉我问题到底出在哪里吗?我的代码如下: import java.io.*; import java.util.*; public class StringReplace{ public static void main(String[] args) throws IO
import java.io.*;
import java.util.*;
public class StringReplace{
public static void main(String[] args) throws IOException
{
System.out.println("Enter path of file:");
Scanner sc=new Scanner(System.in);
String path=sc.nextLine();
File f=new File(path);
if (f.canRead())
{
System.out.print("Now enter the string to replace:_");
String oldString=sc.nextLine();
System.out.print("Now enter the string to replace with:_");
String newString=sc.nextLine();
StringBuffer sb=new StringBuffer();
sc=new Scanner(f);
sc.useDelimiter("");
while(sc.hasNext())
{
sb.append(sc.next());
}
sc.close();
FileWriter fw=new FileWriter(path);
PrintWriter pw=new PrintWriter(fw,true);
System.out.println(sb);
pw.println(sb.toString().replaceAll(oldString, newString));
fw.close();
pw.close();
System.out.print("DONE!");
}
else
System.out.println("File Does Not Exist");
}
}
}
正如注释所述,.java文件和任何其他文本文件之间应该没有区别
我怀疑问题在于您没有意识到您的编辑器应用程序实际上是编码为执行正则表达式搜索/替换,而不是简单的字符串搜索/替换。(这就是
String.replaceAll(…)
所做的…)如果无意中提供了一个包含regex元字符的“要替换的字符串”,您可能会发现它不匹配,或者它在您不期望的地方匹配。如注释所述,.java文件和任何其他文本文件之间应该没有区别
我怀疑问题在于您没有意识到您的编辑器应用程序实际上是编码为执行正则表达式搜索/替换,而不是简单的字符串搜索/替换。(这就是
String.replaceAll(…)
所做的…)如果无意中提供了一个包含regex元字符的“要替换的字符串”,您可能会发现它不匹配,或者它在您不期望的地方匹配。那么该怎么办?老实说,我不会使用Scanner
,我会使用BufferedReader
一次只读一行,可能是边写边写。谁知道使用二进制或文本流时会出现什么实际问题。Java文件可能包含unicode字符。对于我来说,代码在.Java文件中也可以正常工作。@Jon Skeet:我在这里使用的scanner带有一个空白字符串作为分隔符,因为我需要在编辑的文件中保留scanner和bufferedReader的所有默认分隔符。只有“oldString”将被更改。您得到的错误到底是什么?它会做什么?老实说,我不会使用Scanner
,我会使用BufferedReader
一次只读一行,可能是边写边写。谁知道使用二进制或文本流时会出现什么实际问题。Java文件可能包含unicode字符。对于我来说,代码在.Java文件中也可以正常工作。@Jon Skeet:我在这里使用的scanner带有一个空白字符串作为分隔符,因为我需要在编辑的文件中保留scanner和bufferedReader的所有默认分隔符。只有“oldString”将被更改。您得到的确切错误是什么?