删除一个字符后跟空格的每个换行符

时间:2014-11-12 07:57:42

标签: java string rtf

我正在编写一个程序来编辑rtf文件。 rtf文件将始终与

采用相同的格式
Q     XXXXXXXXXXXX
A     YYYYYYYYYYYY
Q     XXXXXXXXXXXX
A     YYYYYYYYYYYY

我想删除Q / A +空格,并在每一行留下X和Y.我的第一个想法是将字符串拆分为每行的一个新字符串,并使用str.split从那里编辑它,如下所示:

private void countLines(String str){
    String[] lines = str.split("\r\n|\r|\n");
    linesInDoc = lines;
}

从这里我的想法是获取每个偶数数组值并摆脱Q +空格并获取每个奇数数组值并摆脱A +空格。有一个更好的方法吗?注意:第一行 somteimes 包含~6位字母数字。我为一个2个非空白字符的if语句解决了这个问题。

以下是代码的其余部分:

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.StringWriter;
import java.io.Writer;

import javax.swing.JEditorPane;
import javax.swing.text.BadLocationException;
import javax.swing.text.EditorKit;


public class StringEditing {
    String[] linesInDoc;

    private String readRTF(File file){
        String documentText = "";
        try{
            JEditorPane p = new JEditorPane();
            p.setContentType("text/rtf");
            EditorKit rtfKit = p.getEditorKitForContentType("text/rtf");
            rtfKit.read(new FileReader(file), p.getDocument(), 0);
            rtfKit = null;  
            EditorKit txtKit = p.getEditorKitForContentType("text/plain");
            Writer writer = new StringWriter();
            txtKit.write(writer, p.getDocument(), 0, p.getDocument().getLength());
            documentText = writer.toString();
        }
        catch( FileNotFoundException e )
        {
            System.out.println( "File not found" );
        }
        catch( IOException e )
        {
            System.out.println( "I/O error" );
        }
        catch( BadLocationException e )
        {
        }
        return documentText;
    }
    public void editDocument(File file){
        String plaintext = readRTF(file);
        System.out.println(plaintext);
        fixString(plaintext);
        System.out.println(plaintext);
    }

3 个答案:

答案 0 :(得分:0)

除非我遗漏了某些内容,否则您可以使用String.substring(int)之类的

String lines = "Q     XXXXXXXXXXXX\n" //
        + "A     YYYYYYYYYYYY\n" //
        + "Q     XXXXXXXXXXXX\n" //
        + "A     YYYYYYYYYYYY\n";
for (String line : lines.split("\n")) {
    System.out.println(line.substring(6));
}

输出是

XXXXXXXXXXXX
YYYYYYYYYYYY
XXXXXXXXXXXX
YYYYYYYYYYYY

如果您的格式应该更加通用,您可能更喜欢

System.out.println(line.substring(1).trim());

答案 1 :(得分:0)

可以通过正则表达式轻松实现(假设' fileText'是您的整个文件的内容)

removedPrefix = fileText.replaceAll("(A|Q) *(.+)\\r", "$2\\r");

正则表达式表示Q或A表示开始,然后是一些(任意数量的)空格,然后是任何(标记为组2)和结束行。这对数字的第一行没有任何作用。结果是没有Q / A和空格的文件内容。如果您知道所需文本之前的确切空格数,则有更简单的方法,但这适用于所有人,并且非常灵活。

如果你逐行处理它

removedPrefix = currentLine.replaceAll("(A|Q) *(.+)", "$2");

就这么简单

答案 2 :(得分:0)

BufferedReader将为您处理换行符\ n。 您可以使用匹配器来验证该行是否具有所需的格式。 如果该行是固定长度,只需使用子字符串

final String bodyPattern = "\\w{1,1}[ \\w]{5,5}\\d{12,12}";

try  (BufferedReader br = new BufferedReader(new FileReader(fileName))) {


            String line;

            while ((line = br.readLine()) != null) {


                    if (line.matches(bodyPattern)) {
                        // 
                       myString = line.substring(6);
                    }
            }
    }
        //catch Block

您可以根据具体要求调整正则表达式模式