0

基本上我要做的是取一个字符串,并替换里面字母表中的每个字母,但保留任何空格而不将它们转换为“空”字符串,这是我打开这个问题的主要原因。

如果我使用下面的函数并传递字符串“ab”,而不是得到“ALPHA BETA”,我得到“ALPHAnullBETA”。

我已经尝试了所有可能的方法来检查当前迭代的单个字符是否为空格,但似乎没有任何效果。所有这些场景都给出了 false ,就好像它是一个常规字符一样。

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;
}
4

6 回答 6

5

compareTo()如果字符串相等,将返回 0。它返回一个正数,第一个字符串“大于”第二个。

但实际上没有必要比较字符串。你可以这样做:

char c = s.charAt(i);

if(c == ' ') {
    // do something
} else {
    sb.append(c);
}

甚至更适合您的用例:

String st = s.substring(i,i+1);
if(t.contains(st)) {
    sb.append(t.get(st));
} else {
    sb.append(st);
}

为了获得更清晰的代码,您的 Map 应该从CharactertoString而不是<String,String>.

于 2012-07-17T22:07:02.807 回答
2

String.compareTo()如果字符串相等,则返回 0,而不是 1。请在此处阅读

请注意,对于这种情况,您不需要将 char 转换为字符串,您可以这样做

if(c == ' ') 
于 2012-07-17T22:05:38.680 回答
1

采用

 Character.isWhitespace(c)  

这解决了这个问题。最佳实践。

于 2012-07-17T22:10:06.450 回答
0

首先,s这个例子是什么?很难遵循代码。然后,您的 compareTo 似乎关闭:

if (st.compareTo(" ") == 1)

应该

if (st.compareTo(" ") == 0)

因为 0 表示“相等”(在 compareTo 上阅读)

于 2012-07-17T22:07:04.797 回答
0

从 compareTo 文档中:The result is a negative integer if this String object lexicographically precedes the argument string. The result is a positive integer if this String object lexicographically follows the argument string. The result is zero if the strings are equal;

你有错误的条件if (st.compareTo(" ") == 1) {

于 2012-07-17T22:07:28.667 回答
0

如果源字符串在测试字符串之前,则 String 的 compareTo 方法返回 -1,如果相等则返回 0,如果源字符串在后面,则返回 1。您的代码检查 1,它应该检查 0。

于 2012-07-17T22:08:56.893 回答