Foy*_*rim 3 java string unicode android char
我有一个类似下面的方法(请忽略代码优化问题.)此方法替换Unicode字符(孟加拉语字符)
static String swap(String temp, char c)
{
Integer length=temp.length();
char[] charArray = temp.toCharArray();
for(int u=0;u<length;u++)
{
if(charArray[u]==c)
{
char g=charArray[u];
charArray[u]=charArray[u-1];
charArray[u-1]=g;
}
}
String string2 = new String(charArray);
return string2;
}
Run Code Online (Sandbox Code Playgroud)
在调试时,我得到了charArray的值,如下图所示:
请注意,字符是我想要的顺序格式.
但是在执行语句之后,存储在String变量中的值不匹配.如下:
我想将字符串显示为"রেরেরে",但它显示"েরেরের"我不想要的东西.请告诉我我做错了什么.
注意 - 我不知道孟加拉语,但我知道一点(或很多,取决于你问谁)关于Unicode以及Java如何支持它.答案假定知道后者而不是前者.
通过Unicode 6.0孟加拉图表,??是从属元音符号?(0x09C7)和辅音?(0x09B0)的组合,并表示为字符数组中两个字符的序列.
如果你单独得到依赖元音符号,在得到的字符序列中(以及字符串),那么你的优化很可能是怪异的,因为它似乎假设Unicode中的孟加拉语字符可以表示为单个Unicode代码点或charJava中的单个变量; 这将导致辅音被另一个辅音替换的情况,但辅音之前的从属元音永远不会被替换.
因此,我认为正确的优化必须考虑依赖元音的存在,并且除了元音之外还要比较以下辅音,即它必须比较字符数组中的两个字符,而不是比较单个字符.这也可能意味着必须更改方法签名以允许char[]传递,而不是单个char,以便孟加拉语字符可以替换为预期的孟加拉语字符,而不是用另一个替换Unicode代码点,这是什么目前正在完成.
其他答案中的注释ArrayIndexOutofBoundsException是有效的.以下使用您的字符替换算法的示例表明,您的算法不仅不正确,而且很可能抛出异常:
class CodepointReplacer
{
public static void main(String[] args)
{
String str1 = "??????";
/*
* The following is a linguistically invalid sequence,
* but Java does not concern itself with linguistical correctness
* if the String or char sequence has been constructed incorrectly.
*/
String str2 = "??????";
/*
* replacement character ? for our strings
* It is not ?? as one would anticipate.
*/
char c = str1.charAt(1);
optimizeKookily(str1, c);
optimizeKookily(str2, c);
}
private static void optimizeKookily(String temp, char c)
{
Integer length = temp.length();
char[] charArray = temp.toCharArray();
for (int u = 0; u < length; u++)
{
if (charArray[u] == c)
{
char g = charArray[u];
charArray[u] = charArray[u - 1]; //throws exception on second invocation of this method.
charArray[u - 1] = g;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
因此,更好的角色替换策略是使用String.replace(CharSequence变体)或String.replaceAll函数,假设您将知道如何将这些与孟加拉语字符一起使用.
| 归档时间: |
|
| 查看次数: |
3859 次 |
| 最近记录: |