我正在编写一个程序来编辑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);
}
答案 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
您可以根据具体要求调整正则表达式模式