Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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/9/blackberry/2.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
String 在字符串中循环查找Unicode字符花费了太多时间_String_Blackberry_Java Me - Fatal编程技术网

String 在字符串中循环查找Unicode字符花费了太多时间

String 在字符串中循环查找Unicode字符花费了太多时间,string,blackberry,java-me,String,Blackberry,Java Me,我正在创建一个自定义字段,希望在其中用图片替换一些unicode字符。这就像为黑莓手机做表情符号一样。我在编辑字段中循环字符并用图像替换unicode字符时遇到问题。当文本变得太长时,循环会花费太多时间 我的代码如下: String aabb = ""; char[] chara = this.getText().toCharArray(); for (int i = loc; i < chara.length; i ++) { Character cc = new Characte

我正在创建一个自定义字段,希望在其中用图片替换一些unicode字符。这就像为黑莓手机做表情符号一样。我在编辑字段中循环字符并用图像替换unicode字符时遇到问题。当文本变得太长时,循环会花费太多时间

我的代码如下:

String aabb = "";
char[] chara = this.getText().toCharArray();
for (int i = loc; i < chara.length; i ++) {
   Character cc = new Character(chara[i]);
   aabb += cc.toString();
   if (unicodeCaracter) {
       //Get the location
       //draw the image in the appropriate X and Y
   }
}
字符串aabb=”“;
char[]chara=this.getText().toCharArray();
对于(int i=loc;i
这很好,图像放在正确的位置。但问题是当文本变大时,循环占用了太多时间,并且文本在设备上的输入变得不友好

如何在文本中查找unicode字符,而不必每次循环查找?他们是不是我错过的另一条路


在这个问题上我需要帮助。提前感谢

在循环的每次迭代中,您将创建一个新字符和一个新字符串,并将该字符串转换为一个字符数组。您还在循环中使用字符串连接,而不是使用StringBuffer。所有这些都将损害性能

这里“Unicode字符”的含义并不明显——Java中的所有字符都是Unicode字符。我怀疑你真的想要这样的东西:

String text = this.getText();
StringBuffer buffer = new StringBuffer(text.length());
for (int i = 0; i < text.length(); i++) {
    char c = text.charAt(i);
    buffer.append(c);
    if (c > 127) { // Or whatever
        // Take some action
    }
}
String text=this.getText();
StringBuffer=新的StringBuffer(text.length());
对于(int i=0;i127){//或任何
//采取行动
}
}
我假设“采取一些行动”将在某些方面改变缓冲区,否则缓冲区当然毫无意义。。。但从根本上说,这可能是你想要的改变


循环中的字符串串联是一个特别糟糕的主意-请参见我的。

在循环的每次迭代中创建一个新字符和一个新字符串,并将字符串转换为字符数组。您还在循环中使用字符串连接,而不是使用StringBuffer。所有这些都将损害性能

这里“Unicode字符”的含义并不明显——Java中的所有字符都是Unicode字符。我怀疑你真的想要这样的东西:

String text = this.getText();
StringBuffer buffer = new StringBuffer(text.length());
for (int i = 0; i < text.length(); i++) {
    char c = text.charAt(i);
    buffer.append(c);
    if (c > 127) { // Or whatever
        // Take some action
    }
}
String text=this.getText();
StringBuffer=新的StringBuffer(text.length());
对于(int i=0;i127){//或任何
//采取行动
}
}
我假设“采取一些行动”将在某些方面改变缓冲区,否则缓冲区当然毫无意义。。。但从根本上说,这可能是你想要的改变


循环中的字符串连接是一个特别糟糕的主意-请参见我的。

需要时间的是字符串连接

字符串在Java中是不可变的。每次你这样做

aabb += cc.toString();
创建一个新的String对象,该对象包含前一个对象的所有字符(必须进行垃圾收集)以及新的字符。使用StringBuilder生成字符串:

StringBuilder builder = new StringBuilder(this.getText().length() + 100); // size estimation
char[] chara = this.getText().toCharArray();
for (int i = loc; i < chara.length; i++) {
   builder.append(chara[i]);
   if (unicodeCaracter) {
       //Get the location
       //draw the image in the appropriate X and Y
   }
}
String aabb = builder.toString();
StringBuilder=newstringbuilder(this.getText().length()+100);//尺寸估算
char[]chara=this.getText().toCharArray();
对于(int i=loc;i
需要时间的是字符串连接

字符串在Java中是不可变的。每次你这样做

aabb += cc.toString();
创建一个新的String对象,该对象包含前一个对象的所有字符(必须进行垃圾收集)以及新的字符。使用StringBuilder生成字符串:

StringBuilder builder = new StringBuilder(this.getText().length() + 100); // size estimation
char[] chara = this.getText().toCharArray();
for (int i = loc; i < chara.length; i++) {
   builder.append(chara[i]);
   if (unicodeCaracter) {
       //Get the location
       //draw the image in the appropriate X and Y
   }
}
String aabb = builder.toString();
StringBuilder=newstringbuilder(this.getText().length()+100);//尺寸估算
char[]chara=this.getText().toCharArray();
对于(int i=loc;i
好吧,除了加快循环外,您还可以尝试最小化工作负载

如果用户正在追加文本,您可以存储上次扫描的位置,然后从那里开始

在插入/删除时,您需要获取插入符号位置并扫描删除/插入的部分,可能还有周围的字符(如果您有字符组而不是被替换的单个字符)


但是,修复循环性能可能会给您的情况带来更好的改进,因为我怀疑您是否会有那么长的字符串使算法更改变得有价值。

好吧,除了加快循环速度外,您还可以尝试最小化工作负载

如果用户正在追加文本,您可以存储上次扫描的位置,然后从那里开始

在插入/删除时,您需要获取插入符号位置并扫描删除/插入的部分,可能还有周围的字符(如果您有字符组而不是被替换的单个字符)


不过,修复循环性能可能会给您带来更好的改进,因为我怀疑您是否会有这么长的字符串使算法更改变得有价值。

最重要的性能增强已经说明,但反向循环也会在BlackBerry应用中有所帮助


最重要的性能增强已经提到,但反向循环也将有助于黑莓应用


你能说得更清楚一点吗:你什么时候才能摆脱这种循环?你在检查什么情况?我不在回路里了