从包含特定字符的字符串中删除行

时间:2015-03-09 22:39:40

标签: java string

我正在开发一个Java项目来读取java类并将所有DOC注释提取到HTML文件中。我无法清理我不需要的一串线。

假设我有一个字符串,如:

"/**
* Bla bla
*bla bla
*bla bla
*/

CODE
CODE
CODE

/**
* Bla bla
*bla bla
*bla bla
*/ "

我想删除所有不以*开头的行。

我有什么方法可以做到吗?

3 个答案:

答案 0 :(得分:5)

首先,您应该使用StringString[]分成String.split(String)换行符。换行符通常为'\n',但为了安全起见,您可以使用System.getProperty("line.separator");获取系统行分隔符。

现在可以将String拆分为String[]换行符的代码

String[] lines = originalString.split(System.getProperty("line.separator"));

将String拆分成行后,您现在可以使用*检查每行是否以String.startsWith(String prefix)开头,如果是,则将其设为空字符串。

for(int i=0;i<lines.length;i++){
    if(lines[i].startsWith("*")){
        lines[i]="";
    }
}

现在您要做的就是将String[]合并为一个String

StringBuilder finalStringBuilder= new StringBuilder("");
for(String s:lines){
   if(!s.equals("")){
       finalStringBuilder.append(s).append(System.getProperty("line.separator"));
    }
}
String finalString = finalStringBuilder.toString();

答案 1 :(得分:0)

是Java的String类有一个返回布尔值的startsWith()方法。您可以遍历文件中的每一行,并检查每行是否以&#34; *&#34;如果确实删除了它。

试试这个:

File inputFile = new File("myFile.txt");
File tempFile = new File("myTempFile.txt");

BufferedReader reader = new BufferedReader(new FileReader(inputFile));
BufferedWriter writer = new BufferedWriter(new FileWriter(tempFile));

String linesToRemoveStartsWith = "*";
String currentLine;

while((currentLine = reader.readLine()) != null) {
    // trim newline when comparing with lineToRemove
    String trimmedLine = currentLine.trim();
    if(!trimmedLine.startsWith(linesToRemoveStartsWith )) continue;
    writer.write(currentLine + System.getProperty("line.separator"));
}
writer.close(); 
reader.close(); 
boolean successful = tempFile.renameTo(inputFile);

答案 2 :(得分:0)

据我记忆,您无法在Java中就地删除文本文档中的行。因此,您必须将所需的行复制到新文件中。或者,如果您需要输出相同的文件,只需更改,您可以将数据读入内存,删除文件,创建一个具有相同名称的新文件,并仅输出所需的行。坦率地说,虽然对我来说似乎有点傻。