2015-11-05 59 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])(类似方法数字存在),而不是做算术这会容易得多对字符值。