基本上我正在尝试做的是取一个字符串,并替换字母表中的每个字母,但保留任何空格而不是将它们转换为"空"字符串,这是我打开这个问题的主要原因.
如果我使用下面的函数并传递字符串"a b",而不是获得"ALPHA BETA",我得到"ALPHAnullBETA".
我已经尝试了所有可能的方法来检查当前迭代的单个字符是否是空格,但似乎没有任何效果.所有这些场景都给出错误,好像它是一个普通的角色.
public String charConvert(String s) {
Map<String, String> t = new HashMap<String, String>(); // Associative array
t.put("a", "ALPHA");
t.put("b", "BETA");
t.put("c", "GAMA");
// So on...
StringBuffer sb = new StringBuffer(0);
s = s.toLowerCase(); // This is my full string
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
String st = String.valueOf(c);
if (st.compareTo(" ") == 1) {
// This is the problematic condition
// The script should just append a space in this case, but nothing seems to invoke this scenario
} else {
sb.append(st);
}
}
s = sb.toString();
return s;
}
Run Code Online (Sandbox Code Playgroud)
compareTo()如果字符串相等则返回0.它返回第一个字符串的正数是"大于"第二个字符串.
但实际上没有必要比较字符串.你可以这样做:
char c = s.charAt(i);
if(c == ' ') {
// do something
} else {
sb.append(c);
}
Run Code Online (Sandbox Code Playgroud)
或者甚至更好地用于您的用例:
String st = s.substring(i,i+1);
if(t.contains(st)) {
sb.append(t.get(st));
} else {
sb.append(st);
}
Run Code Online (Sandbox Code Playgroud)
为了获得更清晰的代码,您的地图应该Character从而String不是<String,String>.
| 归档时间: |
|
| 查看次数: |
3651 次 |
| 最近记录: |