首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >替换大数组中的令牌

替换大数组中的令牌
EN

Stack Overflow用户
提问于 2015-03-11 08:58:43
回答 2查看 74关注 0票数 0

我在主类中有这段代码

代码语言:javascript
复制
String slangOutput = msglower;
                    for (String[] replacement : sd.replacements){
                        if (slangOutput.length() == replacement[0].length()){
                            slangOutput = slangOutput.replace(replacement[0], replacement[1]);
                        }
                    }

并在slangDictionary类中拥有这个> 5000个数组:

代码语言:javascript
复制
String [][] replacements ={
            {"*4u","kiss for you"},
            {"*67"," unknown"},
            {"*eg*","evil grin"},
            {"07734","hello"},
            {"0day","software illegally obtained before it was released"},
            {"0noe","oh no"},
......

我非常肯定java的数组大小有限,当我运行这段代码时,它只替换了1000个数组。如何处理这一问题并优化计算。谢谢你的帮助

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-11 09:24:28

Java数组的大小是不受限制的,除非您接近于Integer.MAX_VALUE。这不是问题所在。

第一个问题是您使用了错误的数据结构。这不是数组的作用。您希望将一些字符串映射到其他字符串,因此这正是应该使用映射的情况。您的replacements应该是Map<String, String>类型的,特别是使用HashMap实现。您可以在类中使用静态初始化器填充映射,如下所示

代码语言:javascript
复制
private static Map<String, String> replacements;
static {
   replacements = new HashMap<String, String>();
   replacements.put("*4u", "kiss for you");
   .....
}

然后,字符串的replace方法不是很快。当您需要在不使用大量代码的情况下执行一些替换时,这是很好的,但是如果您在一个循环中使用它数千次的话,这是非常糟糕的。加快速度的一种方法是使用StringBuilder

代码语言:javascript
复制
StringBuilder sb = new StringBuilder(msglower);
for (Entry<String, String> replacement : replacements.entrySet()) {
  int start = sb.indexOf(replacement.geyKey(), 0);
  while (start >= 0) {
    int end = start + replacement.getKey().length();
    sb.replace(start, end, replacement.getValue());
    start = sb.indexOf(replacement.getKey(), start + replacement.getValue().length());
  }
}

我没有尝试编译上面的内容,但这应该是正确的想法。通过这种方式使用StringBuilder,将使替换程序运行得更快。

票数 0
EN

Stack Overflow用户

发布于 2015-03-11 09:10:28

Java数组最大大小不受1000限制-请检查数组的lenght属性,它是int类型的。如果不检查规范,理论上是2^31-1 = 2147483647,即Integer.MAX_VALUE .因此,您不会在1000个元素之后达到最大大小--它在其他地方(内存?)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28982187

复制
相关文章

相似问题

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