Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在大数组中替换令牌_Java_Arrays_Replace_Token - Fatal编程技术网

Java 在大数组中替换令牌

Java 在大数组中替换令牌,java,arrays,replace,token,Java,Arrays,Replace,Token,我在主类中有这个代码 String slangOutput = msglower; for (String[] replacement : sd.replacements){ if (slangOutput.length() == replacement[0].length()){ slangOutput = slangOutput.replace(re

我在主类中有这个代码

String slangOutput = msglower;
                    for (String[] replacement : sd.replacements){
                        if (slangOutput.length() == replacement[0].length()){
                            slangOutput = slangOutput.replace(replacement[0], replacement[1]);
                        }
                    }
在slangDictionary类中有>5000个数组:

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个数组。如何处理此问题并优化计算。感谢您的帮助

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

Java数组的大小不受限制,除非您得到大约整数.max\u值。这不是问题所在

第一个问题是使用了错误的数据结构。这不是数组的用途。您希望将一些字符串映射到其他字符串,因此这正是您应该使用映射的情况。您的
替换
应该是
Map
类型,特别是使用
HashMap
实现。您可以在类中使用静态初始值设定项填充映射,例如

private static Map<String, String> replacements;
static {
   replacements = new HashMap<String, String>();
   replacements.put("*4u", "kiss for you");
   .....
}

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

Java没有限制任何东西,您是否进行了测试以证明这一点?顺便说一句,我不理解您在尝试替换之前比较字长的意图。这是某种优化吗?它可以以更优化、更优雅的方式完成。Slagoutput/
msglower
包含哪些内容?请举个例子。对不起,我刚刚编辑过。它在一个数组中有5000个属性当我编译它时,错误来了错误:代码太大了,在我为(Map.Entry replacement:sd.replacements){…}编码后,它说必需的:array或java.lang.iterable发现:Map@RickyKristianButar-但是,对了,这是我在不编译时错过的事情。应该是循环中已编辑的
replacements.entrySet()
。您应该能够在文档中找到类似的内容。
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());
  }
}