首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >通过Java 8流API进行StringBuilder操作

通过Java 8流API进行StringBuilder操作
EN

Stack Overflow用户
提问于 2018-05-08 06:23:51
回答 3查看 1.8K关注 0票数 1

我正在努力从StringBuilder中删除一些字符。这种方法效果很好。但是,我想通过Java-8StreamsAPI实现同样的目标。当前代码是冗长的。有没有办法通过Java8StreamsAPI重构第二个方法removeCarryReturnsCharacters()?

代码语言:javascript
复制
private static StringBuilder readEntireFileUsingStream(Path filePath) throws IOException {

    StringBuilder data = new StringBuilder(String.valueOf(Files.readAllLines(filePath, StandardCharsets.ISO_8859_1)));

    return removeCarryReturnsCharacters(data);

}

private static StringBuilder removeCarryReturnsCharacters(StringBuilder fileData){

    int endIndex = 1012;
    String needToRemove = "";
    long totDataChunkCount = fileData.length()/1014;
    long delCounter = 1;
    try{
        while (delCounter < totDataChunkCount) {
            needToRemove = fileData.substring(endIndex, endIndex + 2);
            if (needToRemove.equals("^^")) {
                fileData.delete(endIndex, endIndex + 2);
            }
            endIndex += 1012;
            delCounter++;
        }
    }catch(StringIndexOutOfBoundsException exp){
        throw exp;
    }
    return fileData;
}
EN

Stack Overflow用户

回答已采纳

发布于 2018-05-08 07:49:44

由于缺乏Stream,当前的代码并不冗长,而是大量不必要的操作:

  • 初始赋值needToRemove = "";已过时
  • 您正在维护两个冗余循环变量,delCounterendIndex
  • 您使用的是while循环,尽管您有一个具有初始语句、条件和增量操作的经典计数循环,确切地说,for循环是为
  • 您使用long变量来表示绝对不会超过int值范围的值
  • 您有一个过时的try … catch块,只需重新抛出捕获的异常。
  • 您不需要使用needToRemove变量来保存对象;您可以简单地检查if(fileData.substring(endIndex, endIndex + 2).equals("^^")),或者像我希望的那样只检查两个字符, if(fileData.charAt(endIndex)=='^' && fileData.charAt(endIndex+1)=='^')

解决所有这些问题将使方法变为

代码语言:javascript
复制
private static StringBuilder removeCarryReturnsCharacters(StringBuilder fileData) {
    for(int endIndex = 1012; endIndex < fileData.length(); endIndex += 1012)
        if(fileData.charAt(endIndex) == '^' && fileData.charAt(endIndex+1) == '^')
            fileData.delete(endIndex, endIndex + 2);
    return fileData;
}

我不认为重写循环以使用Stream会带来任何额外的好处。

票数 7
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50227172

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档