- 浏览: 1381058 次
- 性别:
- 来自: 江西
文章分类
- 全部博客 (287)
- oracle (30)
- Java (73)
- MySQL (16)
- Myeclipse/eclipse (12)
- javascript (15)
- JSP/Servlet (7)
- maven (14)
- AJAX (2)
- JQuery (9)
- tomcat (8)
- spring (21)
- Linux (28)
- PHP (9)
- UI (1)
- 编程错误及处理 (38)
- 多线程 (18)
- hibernate (10)
- Web Service (3)
- struts2 (6)
- log4j (3)
- SVN (4)
- DWR (1)
- lucene (1)
- 正则表达式 (4)
- jstl (2)
- SSL (3)
- POI (1)
- 网络编程 (1)
- 算法 (2)
- xml (4)
- 加密解密 (1)
- IO (7)
- jetty (2)
- 存储过程 (1)
- SQL Server (1)
- MongoDB (1)
- mybatis (1)
- ETL (1)
- Zookeeper (1)
- Hadoop (5)
- Redis (1)
- spring cloud (1)
最新评论
-
ron.luo:
牛逼,正解!
maven设定项目编码 -
lichaoqun:
java.sql.SQLException: Can't call commit when autocommit=true -
Xujian0000abcd:
Thanks...
Cannot proxy target class because CGLIB2 is not available. Add CGLIB to the clas -
renyuan2ni:
[i][b][u]引用[list]
[*][img][flas ...
Manual close is not allowed over a Spring managed SqlSession -
851228082:
宋建勇 写道851228082 写道<!-- 文件拷贝时 ...
maven设定项目编码
碰到可能会截取汉字的情况,当然是要不能截取出乱码来,就是不能对整个汉字截取一半。如"我ABC汉字d"这个字符串,截取5个字节的时候,应该是"我ABC",而截取8个字节的时候,应该是"我ABC汉",而不应该是"我ABC汉?",其中"?"为半个汉字,可理解为向前截取
备注:将字符编码GBK改为UTF-8,则每个中文长度按3个字符计算
以下方法是向后截取字符串
以下代码会出现半个汉字问题
public static String subStr(String str, int subSLength) throws UnsupportedEncodingException{ if (str == null) return ""; else{ int tempSubLength = subSLength;//截取字节数 String subStr = str.substring(0, str.length()<subSLength ? str.length() : subSLength);//截取的子串 int subStrByetsL = subStr.getBytes("GBK").length;//截取子串的字节长度 //int subStrByetsL = subStr.getBytes().length;//截取子串的字节长度 // 说明截取的字符串中包含有汉字 while (subStrByetsL > tempSubLength){ int subSLengthTemp = --subSLength; subStr = str.substring(0, subSLengthTemp>str.length() ? str.length() : subSLengthTemp); subStrByetsL = subStr.getBytes("GBK").length; //subStrByetsL = subStr.getBytes().length; } return subStr; } }
备注:将字符编码GBK改为UTF-8,则每个中文长度按3个字符计算
以下方法是向后截取字符串
public static String subStr_1(String str, int start, int end) throws UnsupportedEncodingException{ if (str == null) return null; String chinese = "[\u0391-\uFFE5]"; byte[] b = str.getBytes("UTF-8"); String temp = new String(b, start, end); String last = getLastStr(temp); while(!last.matches(chinese)){ temp = new String(b, start, ++end); last = getLastStr(temp); } return new String(b, start, end); } public static String getByteStr(String str, int start, int end) throws UnsupportedEncodingException{ byte[] b = str.getBytes("UTF-8"); return new String(b, start, end); }
以下代码会出现半个汉字问题
/** * ReadFileByteBuffer.java * cn.com.songjy.test.io * Function: TODO * * version date author * ────────────────────────────────── * 1.0 2013-8-31 songjy * * Copyright (c) 2013, TNT All Rights Reserved. */ package cn.com.songjy.test.io; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.nio.ByteBuffer; import java.nio.CharBuffer; import java.nio.channels.FileChannel; import java.nio.charset.Charset; import java.nio.charset.CharsetDecoder; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** * ClassName:ReadFileByteBuffer * * @author songjy * @version 1.0 * @since v1.0 * @Date 2013-8-31 下午12:15:21 */ public class ReadFileByteBuffer { private static Log log = LogFactory.getLog(ReadFileByteBuffer.class); public static void main(String[] args) { try { FileInputStream fis = new FileInputStream("pom.xml");/*创建文件输入流*/ FileChannel fc = fis.getChannel(); ByteBuffer bb = ByteBuffer.allocate(64);//每次取出64字节 /*将FileChannel中的数据放入ByteBuffer*/ while(-1 != fc.read(bb)){ bb.flip();/*锁定ByteBuffer的空白区*/ Charset charset = Charset.forName("UTF-8");/*创建Charset对象*/ CharsetDecoder decoder = charset.newDecoder();/*创建解码器(CharsetDecoder)对象*/ CharBuffer cb = decoder.decode(bb);/*将ByteBuffer的内容转码*/ log.info(cb); bb.clear(); } } catch (FileNotFoundException e) { log.error(e.getMessage(), e); } catch (IOException e) { log.error(e.getMessage(), e); } } } /*会出现java.nio.charset.MalformedInputException错误,原因是“半个中文问题”*/
发表评论
-
java.io.NotSerializableException: java.util.ArrayList$SubList
2016-03-15 11:36 2867错误信息: 原代码: if (null != dto ... -
java.lang.NoSuchMethodError
2015-10-30 19:50 1265在执行命令 java -Djava.ext.dirs=./de ... -
OutOfMemoryError
2015-01-07 10:49 679错误信息: 执行命令(修改前): java -Djava. ... -
自定义ClassLoader
2014-12-14 17:13 888一、自定义类加载器代码: package foo; im ... -
URL传递中文参数乱码问题
2014-03-14 12:55 1156项目特殊要求,form表单使用get方式提交,由此出现了中文乱 ... -
Java使用正则进行奇偶替换
2013-12-30 11:20 1595/** * 将位于偶数位的数字1替换为2 */ ... -
Java调用ping命令
2013-11-26 10:26 3717package cn.com.songjy; impor ... -
Linux开机启动Java程序
2013-11-25 15:26 3592一、编写启动Java程序shell脚本(smssend.sh) ... -
单例模式
2013-11-05 09:58 793Java之美[从菜鸟到高手演变]之设计模式 Java开发中 ... -
判定2个对象相等之重写equals方法
2013-10-18 11:03 1100package cn.com.songjy.test; ... -
SAX解析XML文件示例
2013-09-13 17:32 1047package cn.com.songjy.test.xml; ... -
二分查找算法(Binary Search)
2013-09-13 17:01 2467项目中遇到需要从数组中查找数据,但是算法很多,于是根据项目需求 ... -
Iterate over rows and cells(EXCEL文件的读取)
2013-09-13 14:13 4101package cn.com.songjy.test.exce ... -
jdk1.5的Exchanger同步工具
2013-08-27 14:04 703package cn.com.songjy.test.sock ... -
jdk1.5的CountDownLatch同步工具
2013-08-27 13:37 816package cn.com.songjy.test.sock ... -
jdk1.5的Semaphere同步工具
2013-08-23 14:20 1094package cn.com.songjy.test.so ... -
jdk1.5条件阻塞Condition的应用
2013-08-23 09:42 1367package cn.com.songjy.test.sock ... -
jdk1.5读写锁技术的妙用
2013-08-19 22:00 1396/** * ReadWriteLockTest.java ... -
jdk1.5的线程锁技术
2013-08-19 20:25 967/** * LockTest.java * cn.co ... -
Callable与Future的应用
2013-08-19 20:03 1073/** * CallableAndFuture.java ...
相关推荐
这就意味着当我们按照字节长度截取字符串时,可能会将一个完整的汉字分割成两部分,从而导致乱码。 Java中的`String`类提供了多种截取字符串的方法,如`substring()`、`subSequence()`等,但它们都是基于字符(char...
在 `main` 方法中,我们创建了一个 `SplitString` 对象,并调用其 `SplitIt` 方法来截取字符串。 总结 本例中,我们实现了一个 Java 字符串截取函数,该函数可以截取指定字节的字符串,并保证汉字不被截半个。该...
本话题将深入探讨如何在Java语言中根据字节数来截取字符串,并结合给出的`SplitString.java`文件,我们可以推测这是一个具体的实现示例。 首先,字符串截取的基本需求是获取字符串的一部分,通常基于特定的起始和...
在进行Java编程时,我们经常会遇到需要按字节截取字符串的情况,尤其是在数据传输、网络通信以及对数据进行存储处理的时候。由于计算机内部存储和处理的都是二进制数据,对于非英文字符,在不同的编码(如UTF-8、GBK...
了解这些方法后,我们就可以灵活地根据需求截取字符串中的特定字节数部分了。但要注意,字节截取可能会涉及到字符编码问题,因此在实际操作时要特别留意编码格式,避免出现乱码或者截取不完整的情况。
总结来说,“按byte截取字符串”是一项实用的技术,涉及到字符串编码、字节数组操作以及对Java语言特性的深入理解。在实际开发中,掌握这项技能对于处理与字节流相关的任务至关重要,尤其是在处理网络数据传输、文件...
2. **计算截取次数**:根据字符串长度和每次截取的字节数,计算出需要截取的次数。如果字符串长度不能被每次截取的字节数整除,则最后一次截取的长度会少于指定的字节数。 3. **实现截取逻辑**:遍历字符串,按照...
在Java编程语言中,处理包含汉字的字符串时,由于汉字在不同编码格式下占用的字节数不同,按字节截取字符串会面临特殊挑战。本文将深入探讨如何正确地按字节截取带有汉字的字符串,以确保不出现半字符或者乱码的情况...
面试中可能会遇到类似的问题,要求编写一个函数来截取字符串,确保汉字不被截半。以下是一个简单的示例实现: ```java public class SplitString { private String str; private int byteNum; public ...
本文将详细解析提供的Java代码,了解如何实现按字节截取字符串,确保不出现半个汉字。 首先,给出的代码定义了一个名为`StringTool`的工具类,其中包含一个静态方法`getSubString`,该方法接受一个字符串`str`和一...
为了实现这一需求,Java提供了String类的getBytes()方法,用于将字符串转换成字节数组,同样也提供了substring()方法用于截取字符串。但在本例中,使用substring()方法无法直接达到目标,因为这种方法无法直接对字节...
总的来说,Java中精确截取字符串涉及到字符编码、字节长度计算等多个方面。对于不同的场景,需要选择合适的方法,确保截取后的字符串既能满足长度要求,又能正确显示其中的文本内容。在实际开发中,可以根据项目需求...
这意味着如果我们直接按字节来截取字符串,可能会截取到某个汉字的中间部分,从而导致乱码。 #### 2. 截取算法设计 为了实现上述功能,我们需要设计一种算法,使得无论我们指定截取多少字节,都不会截取到半个汉字...
需要注意的是,在截取字符串时,我们必须考虑到编码方式对汉字占用字节长度的影响。这是因为,如果错误地估计了字节长度,就有可能导致汉字被截断,从而引发错误。例如,在某些编码方式下,一个汉字可能由三个字节...
本题中,我们需要编写一个函数,该函数能够根据指定的字节数截取字符串,并确保不会出现汉字被截半的情况。这是一个涉及字符编码和边界条件处理的问题。 首先,我们来理解题目中的要求: 1. 函数接收两个参数,一个...
本文将详细介绍一个用于在Java中根据字节数而非字符数截取字符串的方法——`getLimitLengthString`。该方法能够确保在截断中文字符串时不会出现乱码,并且可以适用于JSP页面中的中文字符串截取需求。 #### 方法实现...
2. **字符与字节的区别**:在讨论字符串长度时,需要区分字符数和字节数。一个字符可能由多个字节组成,尤其是在处理非英文字符时。因此,简单地通过字符串的`length()`方法获取的长度实际上是指字符数,而不是字节...
本例通过Java代码实现了一个截取字符串的函数,该函数能够根据指定的字节数截取字符串,并保证在截取过程中不会将中文字符截断,也就是说,如果一个中文字符的字节长度超过了一个字节,那么在截取时会保持该字符的...
replace() 方法用于将字符串中所有出现的某个字符或子串替换为另一个字符或子串。例如: String s="Hello"; String newS=s.replace('l', 'w'); // "Hewwo" 15.trim() 方法 trim() 方法用于去掉字符串开始和结尾的...
当使用`substr()`或`substring()`截取中文字符串时,如果截取的起始位置和长度没有正确地对齐到字符边界,就可能导致部分字符的字节被截断,从而引发乱码。这种问题在其他数据库系统中也常见,尤其是那些不支持...