【发布时间】:2012-09-05 19:42:19
【问题描述】:
我有一个包含一个句子的字节数组。我需要将这句话上的小写字母转换成大写字母。这是我所做的功能:
public void CharUpperBuffAJava(byte[] word) {
for (int i = 0; i < word.length; i++) {
if (!Character.isUpperCase(word[i]) && Character.isLetter(word[i])) {
word[i] -= 32;
}
}
return cchLength;
}
它可以很好地处理诸如“一杯水”之类的句子。问题是它必须适用于所有 ANSI 字符,包括 "ç,á,é,í,ó,ú" 等等。 Character.isLetter 方法不适用于这些字母,因此不会将它们转换为大写。
你知道如何在 Java 中将这些 ANSI 字符识别为字母吗?
编辑
如果有人想知道,我在回答后又做了一次方法,现在看起来像这样:
public static int CharUpperBuffAJava(byte[] lpsz, int cchLength) {
String value;
try {
value = new String(lpsz, 0, cchLength, "Windows-1252");
String upperCase = value.toUpperCase();
byte[] bytes = upperCase.getBytes();
for (int i = 0; i < cchLength; i++) {
lpsz[i] = bytes[i];
}
return cchLength;
} catch (UnsupportedEncodingException e) {
return 0;
}
}
【问题讨论】:
-
重新标记;有些人所说的“ANSI 字符”实际上是 Windows CP-1252; [ANSI] 标签指的是组织。
-
@Truth:PHP 不是 Java。
-
是的。它是。这是怎么复制的?
-
你为什么要使用
lpsz来描述一个不是长指针、甚至不是指针、也不指向空终止字符串的参数?让我们将匈牙利符号保留在它所属的地方,无论它在哪里;-) -
@EJP 我只是想保留原来的 windows 函数签名:msdn.microsoft.com/en-us/library/windows/desktop/…