2015-11-05 55 views
0

我有一個包含文字(大寫和小寫)和數字(0到9)的長字符串。在字符串中交換數字字節操作

我正在對該字符串進行一些字節操作。因此,例如,我與他們的小寫等效替換所有大寫文字是這樣的:

byte[] bytes = myString.getBytes(); 

for (int i = 0; i < bytes.length; i++) { 
    if(bytes[i] >= 'A' && bytes[i] <= 'Z') 
     bytes[i] = (byte)('a' + (bytes[i] - 'A')); 
} 

myString = new String(bytes); 

我也想交換的所有數字如更換所有0 9,所有1月8日和等方式相同,但couldn」弄清楚確切的說法。我試過:

if(bytes[i] >= '0' && bytes[i] <= '9') bytes[i] = (byte)('0' + (bytes[i] - '9')); 

但它只是增加了一些特殊的字符到我的輸出,所以我認爲if語句是錯誤的。任何想法如何在字節操作中交換這些數字?

回答

0

你不能用這個方法來替換數字,就像你用同樣的方法替換lower到upper,反之亦然。因爲數字的ASCII值是串聯的,並且您超出了該限制。而不是你必須嘗試10,如果這樣的條件;

if(bytes[i] == '0') 
    bytes[i] = '9' 
else if(bytes[i] == '1') 
    bytes[i] = '8' 

等等....

1

在特殊字符而言操縱數字的時候,你有減法南轅北轍:

'0' + (bytes[i] - '9') 

應該

'0' + ('9' - bytes[i]) 

如果您正在操作charact使用String.toCharArray()而不是String.getBytes()String在邏輯上是char[]而不是byte[]

字符串中的單個字符可能會轉換爲兩個字節;對單個字節進行算術運算可能會導致您更改字符的「一半」,當您嘗試將其轉換回字符串時可能會導致時髦的結果。

可以使用字符,而不是做幾乎同樣的事情:

char[] chars = myString.toCharArray(); 

for (int i = 0; i < chars.length; i++) { 
    if(chars[i] >= 'A' && chars[i] <= 'Z') 
     chars[i] = (char) ('a' + (chars[i] - 'A')); 
} 

myString = new String(chars); 

閱讀,更不容易出錯使用Character.toLowercase(chars[i])(類似方法數字存在),而不是做算術這會容易得多對字符值。