java中文字符输出问题
发布网友
发布时间:2022-05-06 09:56
我来回答
共5个回答
热心网友
时间:2022-06-29 07:50
这个我网上一找就找到了,代码只把其中一个减号变成了加号。像你这种截5个6个都是同一个结果的话,就不能按照字符串截取了,要截取字节了 。代码如下,我用的是junit测试的,通过没问题。
public static String bSubstring(String s, int length) throws Exception {
byte[] bytes = s.getBytes("Unicode");
int n = 0; // 表示当前的字节数
int i = 2; // 要截取的字节数,从第3个字节开始
for (; i < bytes.length && n < length; i++) {
if (i % 2 == 1)// 奇数位置,如3、5、7等,为UCS2编码中两个字节的第二个字节
{
n++; // 在UCS2第二个字节时n加1
} else {
if (bytes[i] != 0)// 当UCS2编码的第一个字节不等于0时,该UCS2字符为汉字,一个汉字算两个字节
{
n++;
}
}
}
if (i % 2 == 1)// 如果i为奇数时,处理成偶数
{
if (bytes[i - 1] != 0)// 该UCS2字符是汉字时,修复这个截一半的汉字
i = i + 1;
else
// 该UCS2字符是字母或数字,则保留该字符
i = i + 1;
}
return new String(bytes, 0, i, "Unicode");
}
@Test
public void testGetByte() throws Exception {
String s = "abcd我们回答";
System.out.println(bSubstring(s, 6));
}
、//不好意思,把我所有的测试代码都发过来了,我只发你需要的这一个方法吧。
热心网友
时间:2022-06-29 07:51
不明白你的需求,为什么截取前五个和截取前六个要得到一样的字符串,那截取前七个和截取前八个是不是也要得到一样的字符串,依次类推?追问不是啊,就是“我”占两位表示出来啊,输出5个的就是直接用字符串输出,后面的输出6个就是将“我”改为占两位啊,但是我不会写代码
热心网友
时间:2022-06-29 07:51
你的意思是我占两位?
那你用byte吧追问嗯,就是“我”占两位,我也试过用byte但是输出的变成了别的编码形式的东西
追答那你写个算法吧 你需要对字符串每个字符循环 汉字的用byte接收是长度是2
下面这个例子就能判断
String name = "aa我shi哈商";
String tmp = name.substring(2, 3);
byte[] b = new byte[20];
b = tmp.getBytes();
System.out.println(b.length); //结果是2
热心网友
时间:2022-06-29 07:52
是中文占位的问题还是*截取的问题?追问中文占位输出中文的问题
热心网友
时间:2022-06-29 07:52
substring