读书人

java中 批量替换字符串如何实现

发布时间: 2013-01-23 10:44:49 作者: rapoo

java中 批量替换字符串怎么实现
问题:有一个原始字符串String s, 替换规律是将

s中对应的S1字符替换成s2中对应的字符:
s1 = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
s2 = "ysG3MHPZdLx5vO1N0TeRtcmljkziK4bECWoIpuJ62AVrBUDnX9SgFYq7wfh8aQ"

注意,要0->y, 1->s,一一对应 ,需要具体的算法,麻烦各位大神指点,thanks! 字符串,批量替换,指定字符
[解决办法]
比较简单的写法:

public class test {
static String s1 = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
static String s2 = "ysG3MHPZdLx5vO1N0TeRtcmljkziK4bECWoIpuJ62AVrBUDnX9SgFYq7wfh8aQ";

public char getSwap(char c) {
int stat = s1.indexOf(c);
char cc = s2.charAt(stat);
return cc;
}

public String swap(String s) {
String ss = "";
for (int i = 0; i < s.length(); i++) {
ss += getSwap(s.charAt(i));
}
return ss;
}

public static void main(String args[]) {
test t = new test();
System.out.println(t.swap("0123456789"));
}
}

[解决办法]
我的这个复杂点.
import java.util.*;
public class ChangeStringWithString2
{
public static final String s1="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
public static final String s2="ysG3MHPZdLx5vO1N0TeRtcmljkziK4bECWoIpuJ62AVrBUDnX9SgFYq7wfh8aQ";
private Map<Character, Character> map;

public ChangeStringWithString2()
{
map=getMap(s1,s2);
}

private Map<Character, Character> getMap(String s1,String s2)
{
Map<Character, Character> map = new HashMap<Character,Character>();
for(int i=0;i<s1.length();i++)
{
char c1= s1.charAt(i);
Character cChar1=new Character(c1);
char c2=s2.charAt(i);
Character cChar2=new Character(c2);
map.put(cChar1,cChar2);
}
return map;
}

public String change(String s)
{
StringBuilder sb=new StringBuilder(s);
for(int i=0;i<s.length();i++)
{
Character cs=new Character(sb.charAt(i));
Character cs2=map.get(cs);
if(cs2==null)
{
continue;
}
else
{
sb.setCharAt(i,cs2);
}
}
return sb.toString();
}

public static void main(String[] args)
{
ChangeStringWithString2 csws=new ChangeStringWithString2();
String s="abcd123 456";
String result=csws.change(s);
System.out.println("befor change s is "+s);
System.out.println("after change s is "+result);
}
}

[解决办法]
引用:


支持2楼的方法,我也来写一个,原理和2楼的一样:

public static void main(String[] args) {
String s1 = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
String s2 = "ysG3MHPZdLx5vO1N0TeRtcmljkziK4bECWoIpuJ62AVrBUDnX9SgFYq7wfh8aQ";


Map<Character, Character> charMap = new HashMap<Character, Character>(s1.length());
for (int i = 0; i < s1.length(); i++) {
charMap.put(s1.charAt(i), s2.charAt(i));
}

String src = "abcd123 456";
char[] arrChr = new char[src.length()];
for (int i = 0; i < src.length(); i++) { // decode
Character c = charMap.get(src.charAt(i));
arrChr[i] = (c != null) ? c : ' ';
}
System.out.println(String.valueOf(arrChr));
}



和1楼的比起来,还是使用map要高效一点。
因为1楼的indexOf()实际上是数组for循环遍历,相当于两次for循环,n的平方,效率不高。
而HashMap是hash定位,效率会更高一些,而且后期维护起来也方便。

读书人网 >Java相关

热点推荐