关于字符串截取的问题?

wsjonly1 2013-09-08 09:52:43
输入一个字符串,比如"中ABC大EFG" 再输一个数字代表了字符串的字节数,比如4,控制台输出:中AB 输入6,控制台输出:中ABC大 而不是:中ABC+大的半个,程序怎么写?
...全文
183 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
中文和英文的字节码问题。
suciver 2013-09-09
  • 打赏
  • 举报
回复
引用 4 楼 suciver 的回复:

public static void main(String[] args) throws Exception {
		System.out.println(subString("中ABC大EFG", 1));
	}

	static String subString(String src, int length) throws Exception {
		byte[] b = src.getBytes("gbk");
		boolean isChinese = false;
		if (length <= b.length) {
			if (b[length-1] < 0) {//当所截取长度的最后一个字节是汉子时才需要进行汉子解析否则的话就是正常的截取就行了
				for (int i = 0; i < length; i++) {
					if (b[i] < 0 && !isChinese) {// 如果是汉子往后多吞一个字节
						i++;
						length++;
					} else {
						isChinese = true;
					}
				}
			}
		}
		return new String(b, 0, length, "gbk");
	}
上面的代码测试了下有问题请无视之 public static void main(String[] args) throws Exception { System.out.println(subString("中ABC大EFG", 5)); } static String subString(String src, int length) throws Exception { byte[] b = src.getBytes("gbk"); boolean halfChinese = false;//是否是半个汉子 if (length >= b.length) { length=b.length; } if (b[length - 1] < 0) {// 当所截取长度的最后一个字节是汉子时才需要进行汉子解析否则的话就是正常的截取就行了 for (int i = 0; i < length; i++) { if (b[i] < 0 && !halfChinese) {// 如果是汉子往后多吞一个字节(字节数<0并且不是半个汉子) halfChinese = true; } else {//这里的情况就有是正数的或者虽然<0但前面已经有半个汉子了这里就标记为不是半个汉子 halfChinese = false; } } if (halfChinese) length++; } return new String(b, 0, length, "gbk"); }
suciver 2013-09-09
  • 打赏
  • 举报
回复

public static void main(String[] args) throws Exception {
		System.out.println(subString("中ABC大EFG", 1));
	}

	static String subString(String src, int length) throws Exception {
		byte[] b = src.getBytes("gbk");
		boolean isChinese = false;
		if (length <= b.length) {
			if (b[length-1] < 0) {//当所截取长度的最后一个字节是汉子时才需要进行汉子解析否则的话就是正常的截取就行了
				for (int i = 0; i < length; i++) {
					if (b[i] < 0 && !isChinese) {// 如果是汉子往后多吞一个字节
						i++;
						length++;
					} else {
						isChinese = true;
					}
				}
			}
		}
		return new String(b, 0, length, "gbk");
	}
地下室森林 2013-09-08
  • 打赏
  • 举报
回复
中文的ascii码是负数,你可以给个判断,如果是负数的话,执行...

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧