【问题标题】:How to replace a word which I'm searching如何替换我正在搜索的单词
【发布时间】:2016-07-09 01:19:29
【问题描述】:

下面的代码可以搜索值,但现在我必须替换正在搜索的值。请帮助我是 java 新手。这应该可以作为任何具有搜索和替换功能的文本编辑器。

public class TestClass {

    public static void main(String[] args) {
        @SuppressWarnings("resource")
        Scanner scanner = new Scanner(System.in);
        System.out.println("Enter Path to be searched");

        String directory = scanner.next();
        System.out.println("Enter String to be searched");
        String searchString = scanner.next();
        searchDirectory(directory, searchString);

    }
    static void searchDirectory(String directory, String searchString){
        File dir = new File(directory);
        if(!dir.isDirectory()){
            System.err.println("PATH ENTERED is not directory");
            return;
        }
        try{
           for (File file : dir.listFiles()) {
              if(!file.isDirectory()){

                  String  fileName = file.getName().toLowerCase();

                  if (fileName.endsWith((".txt"))
                          ||fileName.endsWith((".log"))) {

                        @SuppressWarnings("resource")
                        BufferedReader br = new BufferedReader(new FileReader(file));
                            String line;
                            int Count =0,
                                index = -1;

                            while ((line = br.readLine()) != null) {
                                Count++;
                               index = line.indexOf(searchString);

                                if(index != -1){
                                    System.out.println("Text '"+searchString+"' Found at position "+index +" in file "+ fileName +" at Line No "+Count);
                                }
                            }
                        }

          }else{
              System.err.println("TestClass.searchDirectory(DIR)"+file.getAbsolutePath());
            //  searchDirectory(file.getAbsolutePath(), searchString);
          }

           }
           }catch(Exception e){
               e.printStackTrace();
           }

    }
}

【问题讨论】:

  • 替换值是什么意思?你不能打电话给searchDirectory(directory, someOtherString);吗?
  • 我猜你的意思是搜索和替换操作?如果是这样,您必须将文件的内容保留在内存中,直到您完成阅读,然后替换搜索字符串(可能在存储时这样做)并最终覆盖文件的内容。如果文件较大,您可以使用临时文件写入,然后用临时文件替换原始文件(或读取临时文件并将内容写入原始文件以保留权限、创建时间戳等)。跨度>
  • 我的意思是,如果要搜索一个名为“安全”的词,我可以在目录中搜索它 bt 现在我想用其他名称替换搜索值
  • 在这里查看更多信息:stackoverflow.com/questions/3935791/…
  • 您要:1- 用新词再次搜索? 2- 将文件中与搜索词匹配的词替换为新词?请选择一个:)

标签: java


【解决方案1】:

你可以试试这个:

public class TestClass {

public static void main(String[] args) {
    @SuppressWarnings("resource")
    Scanner scanner = new Scanner(System.in);
    System.out.println("Enter Path to be searched");

    String directory = scanner.next();
    System.out.println("Enter String to be searched");
    String searchString = scanner.next();
    searchDirectory(directory, searchString);

}
static void searchDirectory(String directory, String searchString) {
    File dir = new File(directory);
    if (!dir.isDirectory()) {
        System.err.println("PATH ENTERED is not directory");
        return;
    }
    try {
        for (File file : dir.listFiles()) {
            if (!file.isDirectory()) {

                String  fileName = file.getName().toLowerCase();

                if (fileName.endsWith((".txt"))
                    || fileName.endsWith((".log"))) {

                    @SuppressWarnings("resource")
                    BufferedReader br = new BufferedReader(new FileReader(file));
                    String line;
                    int Count = 0,
                        index = -1;

                    String replacedText = "";
                    boolean hasValue = false;
                    while ((line = br.readLine()) != null) {
                        Count++;
                        index = line.indexOf(searchString);

                        if (index != -1) {
                            System.out.println("Text '" + searchString + "' Found at position " + index + " in file " + fileName + " at Line No " + Count);
                            line.replace(searchString, newString);
                            hasValue = true;
                        }

                        replacedText += line;

                        br.close();

                        if (hasValue) {
                            FileWriter writer = new FileWriter(file);
                            writer.write(replacedText);
                            writer.close();
                        }
                    }
                }
            }
            else {
                System.err.println("TestClass.searchDirectory(DIR)" + file.getAbsolutePath());
                //  searchDirectory(file.getAbsolutePath(), searchString);
            }
        }
    }
    catch (Exception e) {
        e.printStackTrace();
    }
}

【讨论】:

  • 出现空指针异常
  • 那个很好,但它说“newString”不能解析为变量
  • 当然)你应该定义它!我不知道你要替换哪个字符串
  • 而这段代码只替换了一个单词。如果要替换所有单词,请使用 String.replaceAll() 方法
猜你喜欢
  • 2011-09-25
  • 2011-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-30
  • 1970-01-01
  • 2010-11-19
相关资源
最近更新 更多