【问题标题】:the best way for character replacement in String in javajava中字符串中字符替换的最佳方法
【发布时间】:2013-04-25 21:15:26
【问题描述】:

我想检查每个字符的字符串,我将其替换为其他字符或将其保留在字符串中。而且因为它是一个很长的字符串,所以完成这项任务的时间非常重要。这些最好的方法是什么,或者有什么更好的主意? 对于所有这些,我将结果附加到 StringBuilder。 使用 for 和 charAt 命令检查所有字符。 像以前的方式一样使用 switch 。 使用 replaceAll 两次。

如果第一个 to 方法更好,有没有办法用一组字符检查一个字符,比如: if (st.charAt(i)=='a'..'z') ....

编辑: 请及时告诉耗时的方式并说出原因。你说的这些方式我都知道!

【问题讨论】:

  • 编辑:title =~ s/reolacement/replacement/ =)
  • 这是您的程序所做的全部,还是只是其中的一部分?在 Unix 中,您可以简单地使用 tr 命令。
  • 只是一部分,时间很重要,因为String的大小太大了。
  • 这个字符串在文件中吗?
  • 是的。我逐部分阅读并替换不需要的字符并做一些其他事情并将其准备为字典。

标签: java string replace


【解决方案1】:

如果您想替换单个字符(或单个序列),请使用 replace(),正如其他答案所建议的那样。

如果您想用单个替换字符或字符序列(例如“X”)替换多个字符(例如 'a''b''c'),则应使用正则表达式替换:

String result = original.replaceAll("[abc]", "X");

如果您想替换多个字符,每个字符都有不同的替换(例如,'a''A''b''B'),然后自己循环遍历字符串并将结果构建在 @987654330 @ 可能是最有效的。这是因为,正如您在问题中指出的那样,您只会遍历字符串一次。

String sb = new StringBuilder();
String targets = "abc";
String replacements = "ABC";
for (int i = 0; i < result.length; ++i) {
    char c = original.charAt(i);
    int loc = targets.indexOf(c);
    sb.append(loc >= 0 ? replacements.charAt(loc) : c);
}
String result = sb.toString();

【讨论】:

    【解决方案2】:

    查看documentation并找到一些好的方法:

    char from = 'a';
    char to = 'b';
    str = str.replace(from, to);
    

    【讨论】:

      【解决方案3】:
      String replaceSample = "This String replace Example shows 
      how to replace one char from String";
      String newString = replaceSample.replace('r', 't');
      

      输出:这个 Stting teplace 示例展示了如何在 Stting 中放置一个聊天

      另外,你可以使用 contains:

       str1.toLowerCase().contains(str2.toLowerCase())
      

      检查str1中是否存在子串str2

      编辑。

      只需读取字符串来自文件即可。您可以为此使用正则表达式。这将是最好的方法。

      http://docs.oracle.com/javase/tutorial/essential/regex/literals.html

      【讨论】:

      • 再次阅读问题。我知道所有方法,但要寻找最好的方法!
      • 好的,这是最好的。 0:)
      • 比按字符调查字符串字符更好?为什么?
      • 因为如果你有一个 API,并且你为此做了,那么使用它总是比自己创建一个新方法更好。不要做它已经做的。如果它是由创建和维护 Java 的人制作的,请相信他们的方法。
      • 如果我必须使用它两次并且它会调查我的长字符串两次,但如果我只写一次我会调查。
      【解决方案4】:

      这是你的评论:

      我想将所有大写字母替换为小写字母并替换所有 除了带空格的 a-z 之外的字符。

      你可以这样做:

      str = str.toLowerCase().replaceAll("[^a-z]", " ");
      

      您的要求应该是问题的一部分,而不是在已发布答案下的评论 #7 中...

      【讨论】:

      • 这不是我的问题。我的重要问题是最好的方法!我在问题中提到了所有这些方法,并问了最好的方法:“这些方法中最好的方法是什么,或者有什么更好的主意?对于所有这些方法,我将结果附加到 StringBuilder。用 for 和检查所有字符charAt 命令。像以前一样使用 switch。使用 replaceAll 两次。"
      • @user2273552:你在使用分析器吗?这部分代码是你的瓶颈吗?我会说它不会比我发布的代码更快。我敢打赌,与字符串操作相比,您在 I/O 上花费的时间要多得多。另外,在您的情况下,什么是长字符串?长度一百万,十亿,万亿,更长??
      • 是的。其他部分肯定会消耗更多时间,但我也想减少这部分。这是一个 1.5G 的 .txt 文件,我逐部分阅读,依此类推。无论如何,谢谢
      • @Paniz:这必须在 java 中完成吗?这可以在 shell 中的一行中完成,而且速度非常快。
      • 这是一个大项目的一部分。如果写到不同的地方,我应该如何连接它们?
      【解决方案5】:

      您应该查看regex for Java。您可以匹配整个字符集。字符串有几个函数:replacereplaceAllmatch,您可能会在这里发现它们很有用。

      您可以匹配一组字母数字,例如,使用[a-zA-Z],这可能就是您要查找的内容。

      【讨论】:

        猜你喜欢
        • 2011-03-25
        • 1970-01-01
        • 2011-10-16
        • 1970-01-01
        • 2013-12-26
        • 1970-01-01
        • 2015-10-09
        • 2011-06-17
        • 1970-01-01
        相关资源
        最近更新 更多