前提:
英文字符在utf8编码下是1个字符
中文的utf8编码占3个字符
思路:
将字符数组转化为字符串,这是有可能最后一位是乱码的。对于计算机而言好像没什么好的办法判断最后字符是否为中文或者乱码。 我们再把该未被确认的字符串再解码为 UTF8 的字符数组,这时候你会奇怪的发现 如果最后一位是乱码的话,它会被转换为3个字符。比较字符数组的长度,后面就有很多文章可做了。
import java.io.UnsupportedEncodingException;
import org.junit.Test;
public class StringTest {
@Test
public void test() throws UnsupportedEncodingException{
String str = "hello,我是谁";
byte[] bs = str.getBytes("UTF-8");
printInfo(bs);
//104 101 108 108 111 -17 -68 -116 -26 -120 -111 -26 -104 -81 -24 -80 -127
System.out.println(new String(bs, "UTF-8"));
byte[] bs2 = new byte[bs.length-1];
for(int i=0;i<bs.length-1;i++){
bs2[i] = bs[i];
}
//104 101 108 108 111 -17 -68 -116 -26 -120 -111 -26 -104 -81 -24 -80
printInfo(bs2);
//hello,我是�
String str2 = new String(bs2, "UTF-8");
System.out.println(str2);
//104 101 108 108 111 -17 -68 -116 -26 -120 -111 -26 -104 -81 -17 -65 -67
byte[] bs3 = str2.getBytes("UTF-8");
printInfo(bs3);
System.out.println("");
if(bs2.length!=bs3.length){
//hello,我是
System.out.println(str2.substring(0, str2.length()-1));
int leftLen = 3 - (bs3.length - bs2.length);
byte lefted[] = new byte[leftLen];
for(int i =0; i < leftLen ; i++){
lefted[i] = bs2[bs2.length-1-i];
}
printInfo(lefted);
}
}
private void printInfo(byte[] bs){
System.out.println(bs.length+":");
for(int i=0;i<bs.length;i++){
System.out.print(bs[i]+" ");
}
}
}
分享到:
相关推荐
### JAVA判断字符串是否为数字字符 在日常的Java开发工作中,我们经常需要验证用户输入的数据是否符合预期格式,比如验证电话号码、身份证号等是否仅包含数字。这种情况下,一个简单有效的工具方法就显得尤为重要了...
### Java截取字符串(判断汉字) #### 背景与目的 在开发Web应用程序时,尤其是在使用Java Server Pages (JSP) 进行开发时,经常需要处理包含中文字符的字符串。由于中文字符通常占用两个字节,而英文字符只占用一...
### Java字符串处理技术:中文与英文的兼容性 在Java中,处理字符串是非常常见且重要的任务之一,尤其是在涉及到国际化应用时,如何高效准确地处理中英文混合的字符串就显得尤为重要了。本文将基于提供的代码片段来...
在Java编程中,有时我们需要对字符串进行精确截取,特别是在处理中文字符时,由于中文字符在内存中通常以双字节形式存储,因此简单的按照字符数截取可能会导致汉字被分割,影响显示效果。这个问题在文档标题“Java...
为了更全面地判断中文字符,可以使用正则表达式。Java的`Pattern`和`Matcher`类提供了对正则表达式的支持。以下是一个使用正则表达式的例子: ```java import java.util.regex.Matcher; import java.util.regex....
这个`getSubString`方法很好地解决了按照字节截取字符串时可能出现的半个汉字问题,保证了字符串截取的正确性和完整性。在实际应用中,可以结合前端的显示限制,利用这个方法对字符串进行适当地裁剪,以确保内容的...
这里,代码可能会使用一种策略,比如按照字符数截取,或者保持句子完整性的前提下尽可能截取到接近最大长度的字符串。 最后,这个解决方案还涉及到AOP(面向切面编程)和注解的使用。AOP允许开发者在不修改原有代码...
Java字符集是Java编程语言中处理字符编码的基础概念,它对于理解如何在程序中正确地存储、处理和传输文本至关重要。...在实际开发中,尤其需要注意在处理文本数据时的编码问题,确保数据的完整性和一致性。
4. **IDN(国际化域名)处理**:现代域名支持非ASCII字符,如中文字符。Java提供了IDN类来处理这些域名,将其转换为 Punycode 形式进行处理。 5. **TLD列表**:为了判断顶级域的合法性,开发者需要维护一个TLD列表...
### JAVA判断题题库知识点详解 #### 一、JAVA简介 **1. JAVA的源代码中定义定义几个类,编译结果就生成几个以“.class”为后缀的字节码文件。** - **答案:** 正确 - **解析:** 当我们在编写JAVA程序时,每个定义...
在这个“完整java实例代码”压缩包中,包含了五个不同主题的Java编程实例,它们分别是:猜数字游戏、复数运算、回文判断、希腊字母表的输出以及杨辉三角的输出。下面将对这些知识点进行详细解释。 1. **猜数字游戏*...
在创建或更新表、插入数据、更新数据或执行其他数据库操作时,我们有时需要确保输入的数据不包含任何非法或特殊字符,以避免引发错误或破坏数据的完整性。本话题将深入探讨如何在Oracle存储过程中检查和处理非法字符...
Java的`java.awt`和`javax.swing`库可以用来创建简单的图形界面,用字符模拟坦克和地形,实现动态刷新。 7. **状态管理**:游戏的状态(如游戏进行中、暂停、游戏结束)需要被妥善管理。状态机模型可以用于跟踪和...
根据给定文件的信息,本文将围绕“字符串截取”这一主题进行深入探讨,重点在于如何在Java环境下实现对包含中文字符的字符串进行精确截取,同时确保不会出现半个汉字的情况。 ### 字符串截取的基本概念 在计算机...
Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,日期选择 Java语言开发的简洁实用的日期选择控件,源码文件功能说明: [DateChooser.java] Java 日期选择控件(主体类) [public] ...
根据题目给出的部分内容,我们可以构建一个完整的示例程序来演示如何使用`exists()`方法判断文件是否存在: ```java import java.io.File; public class FileExistsCheck { public static void main(String[] ...
给定的代码片段展示了如何在C语言中实现部分解析逻辑,包括读取字符、判断字符类型、处理操作符和操作数、以及错误处理等。虽然代码中存在一些乱码和不完整的地方,但可以看出作者尝试构建了一个能够解析和计算数学...
接着,通过`matcher.matches()`方法来判断输入的字符串是否完全匹配上述正则表达式。 #### 3. 检查密码中是否存在重复模式 如果密码格式正确,则进一步检查密码中是否存在重复模式。这里采用了两种不同的方式来...
- **单词数**:可以通过判断当前字符是否为字母或数字,并结合前一字符的状态来计算。 - **字符数**:遍历每个字节,计数即可。 - **行数**:遇到换行符`\n`时,行数加1。 对于**空白行**、**代码行**和**注释行**...