2013-05-29 43 views
2

我有一个小方法。它获得带有英文字符的字符串并返回rus字符串(音译);但它有什么问题。我不知道是什么。它返回的不是俄文字符串,而是一些垃圾,如“[C @ 4057db80”;获取垃圾,而不是字符串在toString()

public String getRussianSting(String engString) { 
    char[] engCharString = engString.toLowerCase().toCharArray(); 
    char[] rusCharString = new char[30]; 

    for (int i = 0; i <= engCharString.length - 1; i++) { 
     if (engCharString[i] == ' ') 
      continue; 

     if (i + 1 <= engCharString.length - 1) { 
      if (engCharString[i] == 'c' && engCharString[i + 1] == 'h') { 
       rusCharString[i] = 'ч'; 
       i++; 
       continue; 

      } else if (engCharString[i] == 's' && engCharString[i + 1] == 'h') { 
       rusCharString[i] = 'ш'; 
       i++; 
       continue; 

      } else if (engCharString[i] == 't' && engCharString[i + 1] == 'z') { 
       rusCharString[i] = 'ц'; 
       i++; 
       continue; 

      } else if (engCharString[i] == 'y' && engCharString[i + 1] == 'i') { 
       rusCharString[i] = 'ы'; 
       i++; 

      } else if (engCharString[i] == 'y' && engCharString[i + 1] == 'e') { 
       rusCharString[i] = 'э'; 
       i++; 
       continue; 

      } else if (engCharString[i] == 'y' && engCharString[i + 1] == 'u') { 
       rusCharString[i] = 'ю'; 
       i++; 
       continue; 

      } else if (engCharString[i] == 'y' && engCharString[i + 1] == 'a') { 
       rusCharString[i] = 'я'; 
       i++; 
       continue; 
      } 
     } 

     switch (engCharString[i]) { 
      case 'a': 
       rusCharString[i] = 'а'; 
       break; 
      case 'b': 
       rusCharString[i] = 'б'; 
       break; 
      case 'v': 
       rusCharString[i] = 'в'; 
       break; 
      case 'g': 
       rusCharString[i] = 'г'; 
       break; 
      case 'd': 
       rusCharString[i] = 'д'; 
       break; 
      case 'e': 
       rusCharString[i] = 'е'; 
       break; 
      case 'j': 
       rusCharString[i] = 'ж'; 
       break; 
      case 'z': 
       rusCharString[i] = 'з'; 
       break; 
      case 'i': 
       rusCharString[i] = 'и'; 
       break; 
      case 'k': 
       rusCharString[i] = 'к'; 
       break; 
      case 'l': 
       rusCharString[i] = 'л'; 
       break; 
      case 'm': 
       rusCharString[i] = 'м'; 
       break; 
      case 'n': 
       rusCharString[i] = 'н'; 
       break; 
      case 'o': 
       rusCharString[i] = 'о'; 
       break; 
      case 'p': 
       rusCharString[i] = 'п'; 
       break; 
      case 'r': 
       rusCharString[i] = 'р'; 
       break; 
      case 's': 
       rusCharString[i] = 'с'; 
       break; 
      case 't': 
       rusCharString[i] = 'т'; 
       break; 
      case 'u': 
       rusCharString[i] = 'у'; 
       break; 
      case 'f': 
       rusCharString[i] = 'ф'; 
       break; 
      case 'h': 
       rusCharString[i] = 'х'; 
       break; 
      case '\'': 
       rusCharString[i] = 'ь'; 
       break; 
      default: 
       break; 
     } 
    } 
    return rusCharString.toString(); 
} 
+2

尝试'返回新的String(rusCharString);' – Supericy

+1

@Supericy把这一评论到答案。 –

回答

3
return rusCharString.toString(); 

将返回表示阵列的对象表示的字符串。这是char[]用于敏感数据而不是String的一个主要原因。

尝试:

return new String(rusCharString); 
+0

@LuiggiMendoza感谢您纠正 –

+0

不客气。 –

+0

感谢您的解释 – Abx

1

的问题是,当您使用toString阵列,它将使用它从Object类继承的一个。

如果你想得到一个正确的toString阵列,使用java.util.Arrays.toString(rusCharString)。你看到的垃圾是该数组的哈希码。

如果要单独打印的哈希码,使用rusCharArray.hashCode()

+1

使用'new String(char [])'会更快更简单。 –