在实际的项目中,我们后台的数据库是根据指定编码(如GBK)保存数据的,为防止操作数据库时,因字段值长度超过数据库定义的长度,须在JAVA甚至JS层面做长度的校验控制,如数据库定义的长度是varchar2(10),即10个字节的长度,此时应该在JAVA甚至JS层面校验其对应数据的字节长度是否小于10,如果超过10,应截取为10个甚至9个字节长度(第10、第11个字节正好是一个占两字节的字符的情况)。
package com.bijian.study.string; import java.io.UnsupportedEncodingException; /** * Java截取指定字节长度的字符串 * * 在实际的项目中,我们后台的数据库是根据指定编码(如GBK)保存数据的,为防止操作数据库时,因字段值长度超过数据库定义的长度,须在JAVA甚至JS层面做长度的校验控制 * 如数据库定义的长度是varchar2(10),即10个字节的长度,此时应该在JAVA甚至JS层面校验其对应数据的字节长度是否小于10,如果超过10,应截取为10个甚至9个字节长度(第10、第11个字节正好是一个占两字节的字符的情况) */ public class StringTest01 { public static void main(String [] args) { String pContent = "1大家都清清楚楚了"; int pLen = 10; String resultStr = stingLenProcessNok(pContent, pLen); System.out.println(resultStr); resultStr = stingLenProcessOk(pContent, pLen); System.out.println(resultStr); } /** * 截取时未考虑第pLen、第pLen+1个字节为一个占两字节的字符的情况 * @param pContent * @param pLen * @return */ private static String stingLenProcessNok(String pContent, int pLen) { //由于JAVA的String的length是判断字符的个数,但后台数据库是根据指定编码(如GBK)保存数据的,所以JAVA的字符长度判断需根据字节判断 if(pContent != null) { try { byte[] bytes = pContent.getBytes("GBK"); if(bytes.length > pLen) { int tempLen = new String(bytes, 0, pLen, "GBK").length(); //根据tempLen长度截取原字符串 pContent = pContent.substring(0, tempLen); } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } return pContent; } /** * 截取时考虑了第pLen、第pLen+1个字节为一个占两字节的字符的情况 * @param pContent * @param pLen * @return */ private static String stingLenProcessOk(String pContent, int pLen) { //由于JAVA的String的length是判断字符的个数,但后台数据库是根据指定编码(如GBK)保存数据的,所以JAVA的字符长度判断需根据字节判断 if(pContent != null) { try { byte[] bytes = pContent.getBytes("GBK"); if(bytes.length > pLen) { int tempLen = new String(bytes, 0, pLen, "GBK").length(); //根据tempLen长度截取原字符串 pContent = pContent.substring(0, tempLen); bytes = pContent.getBytes("GBK"); //如果第totalLen、第totalLen+1个字节正好是一个汉字,String的substring方法会返回一个完整的汉字,导致长度为totalLen+1(超过totalLen),所以再次对pContent的长度进行字节判断与处理 if(bytes.length > pLen) { pContent = pContent.substring(0, tempLen-1); } } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } return pContent; } }
运行结果:
1大家都清清 1大家都清
相关推荐
"截取指定长度的字符串"这个主题涉及到的是如何从一个字符串中提取出特定长度的部分。这在处理用户输入、数据展示、信息提取等多个场景中都非常常见。接下来,我们将深入探讨这个知识点。 首先,让我们明确什么是...
如果字符串长度不能被每次截取的字节数整除,则最后一次截取的长度会少于指定的字节数。 3. **实现截取逻辑**:遍历字符串,按照计算出的次数进行截取,并打印或存储每次截取的结果。 #### 示例代码解析 ```java ...
注意,由于字符可能由多个字节组成(如UTF-8编码中的多字节字符),因此截取字节时可能会截断字符。为了确保完整性,通常需要以字符边界进行截取,这可能需要借助于`codecs`库的`decode()`和`iterdecode()`等方法。 ...
Java 字符串截取函数 ...本例中,我们实现了一个 Java 字符串截取函数,该函数可以截取指定字节的字符串,并保证汉字不被截半个。该函数使用 `substring` 方法来实现字符串截取,并且可以应用于各种字符串处理场景。
以下将详细讲解如何在Java中进行字符串长度的判断以及如何截取字符串。 首先,创建一个字符串对象通常使用`String`类的构造函数或者双引号括起来的字符串字面量。例如: ```java String panduan = "你好"; ``` 在...
字节截取是指从一个字符串中截取指定长度的字节,以便于数据传输、存储和处理。 在Java语言中,我们可以使用多种方法来按照字节截取字符串。其中一种常用方法是使用StringBuffer类和charAt()方法来实现字节截取。 ...
标题中的“Java 字符串指定长度”指的是在Java编程中,如何处理字符串以确保它们的长度符合特定的要求。这可能涉及到字符串的截取、填充、格式化等方面的知识。以下是对这个主题的详细解释: 在Java中,字符串是不...
在Java编程语言中,处理带有汉字的字符串时,由于汉字占据多个字节,按照字节进行截取可能会导致汉字被不完整地分割,从而产生乱码。为了解决这个问题,我们需要理解Unicode编码以及如何在Java中正确处理多字节字符...
特别地,对于可能只截取到半个汉字的情况,jieQu方法会自动增加截取字节的长度,直到获取完整的字符为止。 最后,jieQu方法返回截取后的字符串,并在main方法中通过调用jieQu方法,传入特定的字符串和长度值,输出...
在JavaServer Pages (JSP) 中,字符串截取是一项常见的任务,特别是在处理用户输入或显示数据时。JSP 提供了内置对象和脚本元素来处理字符串操作,其中包括字符串截取。下面我们将深入探讨如何在 JSP 页面中进行字符...
Java截取中英文混合字符串的方法 Java截取中英文混合字符串的方法是指在Java语言中截取混合了...Java截取中英文混合字符串的方法需要考虑到编码方式和汉字占用字节长度的问题,并使用特殊的方法来保证汉字不被截半个。
java 字符串截取工具类java 字符串截取工具类
本文详细介绍了如何在前后端开发中实现精确截取指定长度字符串,特别是在处理包含全角和半角字符的情况下。通过具体的代码示例,我们了解到实现这一功能的关键在于正确地识别并计算不同字符的宽度,并据此进行适当的...
根据提供的文件信息,本文将详细解释Java中截取字符串的各种方法及其使用场景,并结合部分示例代码进行说明。 ### Java中截取字符串的方法 在Java编程语言中,字符串的处理是一项非常重要的技能,特别是在开发中...
在Java编程中,有时我们需要对字符串进行精确截取,以便适应特定的需求,比如在网页显示、数据存储或者传输时限制长度。本篇将探讨如何在Java中实现这一功能。 首先,最常见的一种方法是使用`substring()`方法。...
根据双字节字符的数量,如果它是偶数,则直接截取指定长度的字节;如果是奇数,为了避免截断汉字,会减少一个字节再进行截取。最后,将截取后的字节数组转换回字符串,并添加省略号。 面试中可能会遇到类似的问题,...
在编程领域,特别是Android和Java开发中,经常需要处理字符串并从中截取特定部分。"截取特定部分字符串"这个话题涉及到字符串操作的基础知识,它包括查找字符串的开始位置、结束位置,然后提取这两个位置之间的子...
Java 中常用的字符串截取方法 在 Java 编程语言中,字符串截取是非常重要的操作之一。字符串截取可以用于获取字符串中的部分内容,或者将字符串分割成多个部分。本文将详细介绍 Java 中常用的字符串截取方法,包括 ...
SliceByByteTest.java作为测试文件,可能会创建一些测试用例,包括各种长度和编码的字符串,来验证`sliceByByte`方法的正确性。它可能会使用JUnit或其他测试框架,通过断言来检查截取后的字符串是否符合预期。 总结...
如果指定的位置超出字符串的长度范围,则会抛出`MyException`异常。 ```java public char charAt(String s, int i) throws MyException { char[] ch = new char[100]; ch = s.toCharArray(); if (i >= ch.length...