我正在尝试接收一个巨大的文本文件作为输入流,并希望将字符串段转换为另一个字符串。我严格意识到如何做到这一点,如果我将整个输入流转换为字符串,我不想要,因为一些内容丢失,它很有效。谁能请帮忙怎么做? 例如 如果我有一个文件,其内容为“这是需要修改的测试字符串”。我想接受这个字符串作为输入流,并希望将内容修改为“这是被修改的测试字符串”,(通过将'需要'替换为is)。
public static void main(String[] args) {
String string = "This is the test string which needs to be modified";
InputStream inpstr = new ByteArrayInputStream(string.getBytes());
//Code to do
}
在此我希望输出为:这是被修改的测试字符串
提前感谢你。
答案 0 :(得分:3)
如果要更改的文本总是适合一条逻辑行,正如我在评论中所述,我会使用以下内容进行简单的行读取(如果可应用):
public class InputReader {
public static void main(String[] args) throws IOException
{
String string = "This is the test string which needs to be modified";
InputStream inpstr = new ByteArrayInputStream(string.getBytes());
BufferedReader rdr = new BufferedReader(new InputStreamReader(inpstr));
String buf = null;
while ((buf = rdr.readLine()) != null) {
// Apply regex on buf
// build output
}
}
}
但是我总是喜欢使用继承,所以我会在某处定义:
class MyReader extends BufferedReader {
public MyReader(Reader in)
{
super(in);
}
@Override
public String readLine() throws IOException {
String lBuf = super.readLine();
// Perform matching & subst on read string
return lBuf;
}
}
使用MyReader代替标准的BufferedReader,保持替换隐藏在readLine方法中。
优点:替换逻辑在指定的Reader中,代码非常标准。 缺点:它将替换逻辑隐藏到调用者(有时这也是专业人士,仍取决于使用情况)
HTH
答案 1 :(得分:2)
可能我理解你错了,但我认为你应该建立一个堆栈机器。我的意思是你可以使用一个小的字符串堆栈来收集文本并检查替换条件。
如果刚收集的堆栈已经与您的条件不匹配,只需将堆栈刷新输出并再次收集它。
如果您的筹码与条件类似,请继续收集。
如果您的堆栈符合您的条件,请进行修改并刷新已修改的堆栈以输出。