匹配部分的删除,并从字符串中找出一些匹配的关键字

时间:2019-02-27 08:21:38

标签: java

我想替换文本文件中存在的字符串中的几个单词。每当建立比赛时,都会删除该比赛。示例:“学习Java并不是那么容易,但是/ *也不是那么难* / int a,int b,char c”。我需要用它替换整个注释部分和相关单词(/ *- -------- * /)并多次打印将要创建的关键字。在这种情况下,我该怎么办?这是我的代码。

public static void main(String[] args)throws IOException 
   {
        File f1=new File("Read_A_File.txt");
        File f2=new File("New_Generated_File.txt");

        FileReader fr=new FileReader(f1);
        FileWriter fw=new FileWriter(f2);

        BufferedReader br=new BufferedReader(fr);
        BufferedWriter bw=new BufferedWriter(fw);

        String st;
        while((st=br.readLine())!=null) 
        {    
         if(st.contains("/*"))
           {
                bw.write(st.replaceAll("([/*-*/])", " "));  
           }

           System.out.println(st);
           bw.newLine();  
        }
        br.close();
        bw.close();
    }

enter image description here

1 个答案:

答案 0 :(得分:0)

编程基础之一。我发现最简单的方法是找到分隔符,并切出要保留的部分,然后将它们连接起来。例如:

String str = "word word, /*comment*/ drow drow";
String result;

int start = str.indexOf("/*");
int end = str.indexOf("*/");

result = str.substring(0, start+1)+str.substring(end, str.length()-1);

或根据需要将其放入循环中。首先,您搜索注释开头和结尾的索引,然后仅用子字符串切出所需的部分。 (根据文档,开始是包容性的,而结束是排他性的...),此外,您必须从长度取反,因为它返回的是总长度,但是indes以0开头。这种方法也取悦了编程的嗜血之神

另一种方法可能是使用deleteCharAt()进行for循环,您只需遍历字符串并逐个删除字符:

for (int i=0; i<end-start; i++) {
 str.deleteCharAt(start);
}

这很好,因为无论语言如何,基本思想都是相同的。第二个也是不可思议的解决方案。