算法之截取带汉字的字符串

输入“我ABC汉DEF”和字节数6,应该输出“我ABC”,而不是“我ABC+汉的半个”。

public class CutOutHanzi {
    public static void main(String[] args) throws UnsupportedEncodingException {
        String str = "我ABC汉DEF";
        cutOutGBK(str,6);
    }
    public static String cutOutGBK(String str,int n) throws UnsupportedEncodingException{//n为要截取的字节数
        byte[] buf = str.getBytes("GBK");
        int num = 0;
        boolean isHanziFirstHalf = false;
        for (int i = 0; i < n; i++) {
            if(buf[i]<0 && !isHanziFirstHalf)
                isHanziFirstHalf = true;
            else{
                num++;
                isHanziFirstHalf = false;
            }
        }
        return str.substring(0,num);
    }
}
时间: 2024-10-14 09:05:10

算法之截取带汉字的字符串的相关文章

截取指定长度的字符串

/* * 函数说明:截取指定长度的字符串 * utf-8专用 汉字和大写字母长度算1,其它字符长度算0.5 * * @param string $str 原字符串 * @param int $len 截取长度 * @param string $etc 省略字符... * @return string 截取后的字符串 */ if(!function_exists('ReStrLen')) { function ReStrLen($str, $len=10, $etc='...') { $restr

第5章 字符串 判断截取的两个字符串相同

1.第一种方法 package five; public class Fivetwozero { public static void main(String[] args){ //定义两个字符串 String str="hello world"; String str1="Hello java"; //截取这两个字符串的部分字符 String substr=str.substring(0, 4); String substr1=str1.substring(0,

带属性的字符串 NSMutableAttributedString/NSAttributedString

由于iOS7新出的NSTextStorge是NSMutableAttributedString的子类,所以要用好NSTextStorage,首先要学好NSMutableAttributedString和NSAttributedString. 按个人的理解,NSAttributedString是一个带有属性的字符串,通过该类可以灵活地操作和呈现多种样式的文字数据. alignment //对齐方式 firstLineHeadIndent //首行缩进 headIndent //缩进 tailInd

java按给定字节数截取含有中英文的字符串

需求:按给定字节数截取含有中英文的字符串,最后一个字节如果截取的是中文则不截取,是英文则截取 实现代码如下(未进行空字符串或非法字节数等异常判断) 1 import java.util.ArrayList; 2 import java.util.List; 3 import java.util.Scanner; 4 5 /** 6 * Created by ycl on 2017-8-18 21:01:16. 7 */ 8 public class TestA { 9 public static

asp.net截取指定长度的字符串内容

1 /// <summary> 2 /// 用于截取指定长度的字符串内容 3 /// </summary> 4 /// <param name="sString">用于截取的字符串</param> 5 /// <param name="nLength">截取字符串的长度</param> 6 /// <returns>返回截取后的字符串</returns> 7 public

批处理命令:带参数的字符串替换

批处理命令:带参数的字符串替换 @echo off setlocal enabledelayedexpansion set main_str=hello world set src=hello set dst=hi echo %main_str% set sub_str=!main_str:%src%=%dst%! echo %sub_str%

生成一个包含所有汉字的字符串 &quot;一&quot;字开始&quot;\4e00 到9fa5

/** *    生成一个包含所有汉字的字符串 "一"字开始"\4e00 到9fa5 *    思路: *    1.既然是包含所有,肯定是从一个字符,到另一个字符之间的所有字符 *    2.因为String对象每创建一个不一样的,都会开辟空间,避免浪费内存,用STringBuilder的拼接更好 *  3.因为是输出所有拼接后的问题,所以用循环 *  4.为了避免太多一行显示不下,50个一换行显示,所以需要一个计数器 * *  步骤 *  1.循环变量初始化,这里循环变量

c语言中读入带空格的字符串

http://blog.csdn.net/pipisorry/article/details/37073023 问题: scanf("%s", a); 运行输入hello world 回车 则输入到a的只是空格之前的部分,怎样把空格之后的部分也输出? 1. scanf( "%[^\n]", str ); #include <stdio.h> int main(){ char str[50]; scanf( "%[^\n]", str

在ASP.NET中,IE与Firefox下载文件带汉字名时乱码的解决方法

解决办法: HttpContext.Current.Response.Clear(); HttpContext.Current.Response.Buffer = true; HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312"); HttpContext.Current.Response.Charset = "gb2312"; HttpCon