Java字符串。用其他字符列表替换字符列表
我有一个值为-f.e的字符串变量:Java字符串。用其他字符列表替换字符列表,java,arrays,string,Java,Arrays,String,我有一个值为-f.e的字符串变量: 这是test-str-ingłóśżć徖 我想替换这个字符: ,-,ł,ś,ż,ż,ż, 其中: ,,l,o,s,z,c,n 这里我的意思是,如果解析器将发现f.e.:char-(在第一个列表中是第二个)应该被替换为在第二个列表中处于相同位置/位置的char,在本例中是:\uu charo应替换为charo 字符n应替换为字符n 在我的例子中,要替换的字符列表相当长,在循环中对每个要替换的字符进行解析效率不高 我知道方法replaceAll()。但它只接受一个
这是test-str-ingłóśżć徖
我想替换这个字符:
,-
,ł
,ś
,ż
,ż
,ż
,
其中:
,
,l
,o
,s
,z
,c
,n
这里我的意思是,如果解析器将发现f.e.:char-
(在第一个列表中是第二个)应该被替换为在第二个列表中处于相同位置/位置的char,在本例中是:\uu
charo
应替换为charo
字符n
应替换为字符n
在我的例子中,要替换的字符列表相当长,在循环中对每个要替换的字符进行解析效率不高
我知道方法replaceAll()
。但它只接受一个in字符串和一个out字符串
所以我正在寻找一种方法,它允许我处理数组/字符串列表,而不是单个字符串
请给我一些帮助。char[]out=new char[src.length();
char[] out = new char[src.length()];
for( j ...){
inputChar = src.charAt(j);
for (int i = 0; i < convertChars.length; i++) {
if (inputChar == convertChars[i]) {
inputChar = toChars[i];
}
}
}
out[j] = inputChar ;
}
out2 = new String(out);
对于(j…){
inputChar=src.charAt(j);
for(int i=0;i
从没有IDE的较大代码中提取,未经测试。循环(我希望)不会分配对象,也不会降低速度。char[]out=new char[src.length();
对于(j…){
inputChar=src.charAt(j);
for(int i=0;i
从没有IDE的较大代码中提取,未经测试。循环(我希望)不会分配对象,也不会降低速度。使用java.text.Normalizer
将重音字母分解为基本字母加上“组合变音符号”
这将执行分解(D)规范化,然后删除标记
仍然需要一些替换。使用java.text.Normalizer
将重音字母分解为基本字母加上“组合变音符号”
这将执行分解(D)规范化,然后删除标记
仍然需要一些替换项。创建一个静态查找表:
private static char[] substitutions = new char[65536];
static {
// Initialize
for (char c = 0; c < substitutions.length; c++) {
substitutions[c] = c;
}
// Now add mappings.
substitions['-'] = '_'; // Map source->target character
... // Add the rest
}
// LATER IN Code
char[] stringChars = inputString.toCharArray();
for (int i = 0; i < stringChars.length; i++) {
stringChars[i] = substitutions[stringChars[i]];
}
outputString = new String(stringChars);
private static char[]substitutions=new char[65536];
静止的{
//初始化
for(字符c=0;c目标字符
…//把其余的加起来
}
//以后的代码
char[]stringChars=inputString.tocharray();
对于(int i=0;i
创建一个静态查找表:
private static char[] substitutions = new char[65536];
static {
// Initialize
for (char c = 0; c < substitutions.length; c++) {
substitutions[c] = c;
}
// Now add mappings.
substitions['-'] = '_'; // Map source->target character
... // Add the rest
}
// LATER IN Code
char[] stringChars = inputString.toCharArray();
for (int i = 0; i < stringChars.length; i++) {
stringChars[i] = substitutions[stringChars[i]];
}
outputString = new String(stringChars);
private static char[]substitutions=new char[65536];
静止的{
//初始化
for(字符c=0;c目标字符
…//把其余的加起来
}
//以后的代码
char[]stringChars=inputString.tocharray();
对于(int i=0;i
我建议您尝试一下ApacheCommonsLang&StringUtils
replaceAll是重磅(regex)。fast是replace(),只有少量变体。professional似乎使用CharsetProvider和family实现“代码页”操作。我看到了一些关于古代波兰852页,马佐维亚和转换器的东西。你想做什么?看看dasblinkenlight链接的问题。我有一种强烈的感觉,那就是你想要的。添加对replaceAll
的第二个调用,并用下划线替换空格、减号等。我建议您尝试一下apache commons lang&StringUtils
replaceAll是重载(regex)。fast是replace(),只有少量变体。professional似乎使用CharsetProvider和family实现“代码页”操作。我看到了一些关于古代波兰852页,马佐维亚和转换器的东西。你想做什么?看看dasblinkenlight链接的问题。我有一种强烈的感觉,那就是你想要的。添加对replaceAll
的第二个调用,并用下划线替换空格、减号等。确定。我会试试看,因为这似乎是最优雅的提议。它不会将ł
转换为l
,并且仍然需要将空格
更改为。
我添加了一些额外的replaceAll
来实现我的目标:返回规范化器。规范化(stringToConvert,Form.NFKD)。replaceAll(\\p{M},“”)。replaceAll(“,”,“).replaceAll”(“,“,”).replaceAll”(“l”)代码>。现在它起作用了。谢谢。在没有正则表达式开销的情况下执行.replace(“ł”,“l”)
甚至.replace('''.'''.'
)就足够了。字符串替换比正则表达式替换快,字符替换比字符串替换快,因为新的字符串长度提前知道。好的。我会试试看,因为这似乎是最优雅的提议。它不会将ł
转换为l
,并且仍然需要将空格
更改为。
我添加了一些额外的replaceAll
来实现我的目标:返回规范化器。规范化(stringToConvert,Form.NFKD)。replaceAll(\\p{M},“”)。replaceAll(“,”,“).replaceAll”(“,“,”).replaceAll”(“l”)代码>。现在它起作用了。谢谢。在没有正则表达式开销的情况下执行.replace(“ł”,“l”)
甚至.replace('''.'''.
)就足够了。字符串替换比