截取字符串,含有汉字和字母,不能截半个汉字

原文地址:http://blog.csdn.net/dreameer_dd/article/details/73457593

/**
 * 2017年6月19日
 *
 * 问题描述:
 *       编写一个截取字符串的函数,输入为一个字符串和字节数,
 *       输出为按字节截取的字符串。但是要保证汉字不被截半个,
 *       如"我ABC"4,应该截为"我AB",
 *       输入"我ABC汉DEF",6,应该输出为"我ABC"而不是"我ABC+汉的半个"。
 *
 * 问题考察:
 *       1.字符串长度(字符数)与字节数的区别
 *       2.英文只占一个字节,中文占两个字节或者3个字节
 */
public class TestCut {  

    public static void main(String[] args) {
        String str="我ABC汉DEF";
        str=cutString(str,6);
        System.out.println("截取的字符串:"+str);
    }  

    //通过字节数截取字符串
    private static String cutString(String str, int i) {
        String tempStr=null;
        StringBuilder resultStr=new StringBuilder();
        int len=0;
        int sum=0;
        for(int j=0;j<str.length();j++){
            tempStr=String.valueOf(str.charAt(j));
            len=tempStr.getBytes().length;
            //判断是否是汉字
            if(len>1){
                sum=sum+len;
                //判断字节数是否已越界
                if(sum<=i){
                    resultStr.append(tempStr);
                }else{
                    break;
                }
            }else{
                sum=sum+1;
                if(sum<=i){
                    resultStr.append(tempStr);
                }else{
                    break;
                }
            }
        }
        return resultStr.toString();
    }  

}  

解决思路:1.通过字节数来判断是否中文(正如我上面使用的)
         2.中文的ASCII码是负数

面试的时候遇到这道题、居然不知道怎么做。可能前一段时间都在搞三大框架还有其他技术,却丢了Java基础,结果面试处处碰壁。
基础的东西很重要~ 慎记
2017-11-29我是十一月面试的,和博主碰到了相同的问题,难道我两面试过同一家公司转载过来
时间: 2024-10-17 10:49:22

截取字符串,含有汉字和字母,不能截半个汉字的相关文章

Java按照字节来截取字符串的工具,不会出现半个汉字

原文:Java按照字节来截取字符串的工具,不会出现半个汉字 源代码下载地址:http://www.zuidaima.com/share/1550463396842496.htm Java 按照字节来截取字符串的工具,不会出现半个汉字.一个中文两个字节,一个英文字符只占 1 个字节 1. 通常我们用于前端显示的时候,防止标题过长.... /* * Copyright 2012-2013 The Haohui Network Corporation */ package com.haohui.com

面试题之java 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 要求不能出现截半的情况

题目:10. 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串. 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”. 一.需要分析 1.输入为一个字符串和字节数,输出为按字节截取的字符串-------------->按照字节[byte]截取操作字符串,先将String转换成byte类型 .2.汉字不可以截半----------------------------------

java基础知识回顾之---java String final类普通方法的应用之“按照字节截取字符串”

/*需求:在java中,字符串“abcd”与字符串“ab你好”的长度是一样,都是四个字符.但对应的字节数不同,一个汉字占两个字节.定义一个方法,按照最大的字节数来取子串.如:对于“ab你好”,如果取三个字节,那么子串就是ab与“你”字的半个,那么半个就要舍弃.如果去四个字节就是“ab你”,取五个字节还是“ab你”.*/ 代码:其实是一个解码和编码的问题,要明白UTF-8码表和GBK码表的区别,UTF-8中用三个字节代表一个汉字,GBK使用2个字节代表一个汉字. 且在码表中都是用数字存放这些汉字.

取指定的字符串,字符串里面有汉字和字母

解决这个问题之前,我们须要了解的是,在GBK字符集的编码中汉字占2个字节.字母和其它字符占一个字节,而在utf-8中汉字占3,或者4个字节,字母占2个字节,因为,utf一下占2个3个字节.一下占4个字节,不好拆分出指定的汉字加字母.所以才用gbk的编码格式,汉字占2个字节,字母一个字节. 在把汉字转换成字节的时候.输出的字节的值小于0,字母转换成字节的时候,输出的值就是其相应的数字. 在String对象中.它的长度计算,是汉字算一个,字母也算一个 代码例如以下: package com.wj.d

js截取字符串区分汉字字母代码

js截取字符串并且区分汉字字母,一个汉字辨别为两个字节. function substr(str, len) { if (!str || !len) { return ''; } // 预期计数:中文2字节,英文1字节 var a = 0; // 循环计数 var i = 0; // 临时字串 var temp = ''; for (i = 0; i < str.length; i++) { if (str.charCodeAt(i) > 255) { // 按照预期计数增加2 a += 2;

用js识别字符串中的英文字母字符和非字符(汉字)

前不久去阿里的在线笔试,最后一道题可算是难倒了我,题目大概是这样的:用原生的js实现字符串中的英文字母字符和汉字的识别,汉字按照两个单位计算,英文和字符按照一个单位计算,乍一想真不知道有什么好办法,以前写c代码太多,就用c代码对ascii的办法来,笔试结束字符才知道,js是很高大上的玩意儿,这招行不通.在这里我介绍一种很简单很靠谱的方法,用unicode字符集的办法来解决. 首先脑补一下小知识:unicode字符集数字0 - 128是英文字母字符(半角)的范畴,在这以外是其他字符(全角),用js

一个截取字符串函数引发的思考

背景 前些天,遇到这样一个问题,问题的内容如下: 要求编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串.但是要保证汉字不被截半个,如"我ABC", 4,截取后的效果应该为"我AB",输入"我ABC汉DEF", 6,应该输出为"我ABC",而不是"我ABC+汉的半个". 问题 刚看到这个问题的时候,以为还是很简单的,但写出来之后,发现并不是想要的效果.回想一下当时的思路,就发现刚开

C#中如何按字节数截取字符串?

今天要截取一个文档,发现C#中substring默认是将汉字当一个字节来截取的,但是我需要把汉字按照2个字节来算. 比如: str="雪洁hello" 我想要前5个字节的字符,也就是"雪洁h". 如何处理? C#中substring默认是将汉字当一个字节来截取的,那么如何按字节数截取字符串? 答案: using System; using System.Collections.Generic; using System.Web; using System.Web.U

Java机试题目_怎样截取字符串

面试题1  怎样截取字符串 考题题干 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串.但是要保证汉字不被截半个,如"我ABC"4,应该截为"我AB",输入"我ABC汉DEF"6,应该输出"我ABC",而不是"我ABC+汉的半个". 试题分析 本面试题容易产生困惑的是中文字符和英文字符,在这里需要考虑汉字和英文字符的占用字节数问题,中文字符占两个字节,英文字符占一个字节,理解了这