繁体   English   中英

从输入流中替换字符串段

[英]replace a string segment from input stream

我试图接收一个巨大的文本文件作为输入流,并希望将字符串段转换为另一个字符串。 我严格意识到如何做到这一点,如果我将整个输入流转换为字符串,我不想要,因为一些内容丢失,它很有效。 谁能请帮忙怎么做? 例如,如果我有一个文件,其内容为“这是需要修改的测试字符串”。 我想接受这个字符串作为输入流,并希望将内容修改为“这是被修改的测试字符串”,(通过将'需要'替换为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


    }

在这里我希望输出为:这是被修改的测试字符串

提前感谢你。

如果要更改的文本总是适合一条逻辑行,正如我在评论中所述,我会使用以下内容进行简单的行读取(如果可应用):

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

可能我理解你错了,但我认为你应该建立一个堆栈机器。 我的意思是你可以使用一个小的字符串堆栈来收集文本并检查替换条件。

如果刚收集的堆栈已经与您的条件不匹配,只需将堆栈刷新输出并再次收集它。

如果您的堆栈与条件类似,请继续收集它。

如果您的堆栈符合您的条件,请进行修改并刷新已修改的堆栈以输出。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM