我正在编写一个编辑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+空格。有更好的方法吗?注:第一行标题词包含一个~6位字母数字。我为一个非空格字符设置一个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);
}
发布于 2014-11-12 00:09:22
除非我错过了什么,否则你可以用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());
发布于 2014-11-12 00:11:05
regex很容易完成(假设'fileText‘是整个文件的内容)
removedPrefix = fileText.replaceAll("(A|Q) *(.+)\\r", "$2\\r");
regex指的是开始的Q或A,然后是一些(任意数量的)空格,然后是任何(标记为第2组)和结束行。这对带有数字的第一行没有任何作用。结果是没有Q/A和空格的文件内容。如果您知道所需文本之前的空格的确切数量,有更简单的方法,但这对所有人都有效,而且非常灵活。
如果你一行行地处理
removedPrefix = currentLine.replaceAll("(A|Q) *(.+)", "$2");
就这么简单
发布于 2014-11-12 00:58:48
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
您可以根据特定的需求调整regex模式。
https://stackoverflow.com/questions/26881891
复制