精华内容
下载资源
问答
  • java 字符串截取

    2016-12-22 17:07:00
    java 字符串截取(当遇到截取半个汉字的处理)方法2舍去(项目中用的) 方法1是看的别人的,个人认为方法1简洁 package everyDay; import java.io.UnsupportedEncodingException; /** * * 题目:编写一个截取...

    java 字符串截取(当遇到截取半个汉字的处理)方法2舍去(项目中用的)

    方法1是看的别人的,个人认为方法1简洁

    package everyDay;

    import java.io.UnsupportedEncodingException;


    /**
    * * 题目:
    编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”。
    GB2312、GBK、GB18030,CP936以及CNS11643都满足条件 -- 中文是占用2个字节的,英文是占用1一个字节 。
    因为中文转换为byte字节,随着编码的不同,转换的字节长度也会不通,如编码为UTF-8,一个中文字符串转换为byte占三个字节.
    *
    */
    public class LearnCSplit {
    /**
    * 方法1,比方法2简洁
    * @param text
    * 目标字符串
    * @param length
    * 截取长度
    * @param encode
    * 采用的编码方式
    * @return
    * @throws UnsupportedEncodingException
    */
    private static String substring(String str, int length1, String code) throws UnsupportedEncodingException {
    if (str==null) {
    return null;
    }
    StringBuilder sb=new StringBuilder();
    int currentLength=0;
    for (char c : str.toCharArray()) {
    currentLength+=String.valueOf(c).getBytes(code).length;
    if (currentLength<=length1) {
    sb.append(c);
    }else {
    break;
    }
    }

    return sb.toString();
    }
    public static void main(String[] args) throws UnsupportedEncodingException {
    //StringBuilder sb=null;//线程不安全,性能高
    String str="我ABC汉DEF";
    int length1=3;
    int length2=6;
    String [] codes=new String[]{"GB2312","GBK","GB18030","CP936","CNS11643","UTF-8"};
    for (String code : codes) {
    System.out.println(new StringBuilder().append("用").append(code)
    .append("编码截取字符串--【“").append(str).append("】")
    .append(length1).append("个字节的结果是【")
    .append(substring(str,length1,code)).append("】").toString());

    System.out.println(new StringBuilder().append("用").append(code)
    .append("编码截取字符串--【“").append(str).append("】")
    .append(length2).append("个字节的结果是【")
    .append(substring(str,length2,code)).append("】").toString());
    }

    以上是方法1的
    String value="乌鲁木齐测试测试开发资源服务有限责任公司达坂城分公司1A2b3";
    //统计字节数
    int countBytes=conutByte(value);
    //已知字段长度40个字节
    if (countBytes>40) {
    value=substr(value,0,40);
    System.out.println("输出指定字段长度的字符串:"+value);

    }






    }

    /**
    * 统计字节数
    * @param value
    * @return
    */
    private static int conutByte(String value) {
    if (value==null) {
    return 0;
    }
    byte[] bs;
    try {
    bs = value.getBytes("GB18030");
    int lenbs=bs.length;
    return lenbs;
    } catch (UnsupportedEncodingException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }

    return 0;
    }
    /**
    * 截取字符
    * @param str
    * @param begin
    * @param zdcd
    * @return
    */
    private static String substr(String str, int begin, int zdcd) {
    if (str == null) {
    return str;
    }
    String str2;

    str=getSubString(str,zdcd);//截取指定字节长度的字符串,不能返回半个汉字20
    zdcd=conutByte(str);//再从新计算字节个数,19
    //我去恶趣味123我我去
    byte[] bs;
    try {
    bs = str.getBytes("GB18030");
    str2 = new String(bs, begin, zdcd, "GB18030");
    return str2;
    } catch (UnsupportedEncodingException e) {
    e.printStackTrace();
    }
    return "";

    }
    /**
    * <b>截取指定字节长度的字符串,不能返回半个汉字</b>
    * @param str
    * @param zdcd
    * @return
    */
    private static String getSubString(String str, int zdcd) {
    int count=0;
    int offset=0;
    char[] c=str.toCharArray();

    for (int i = 0; i < c.length; i++) {

    if (c[i]>256) {
    offset=2;
    count+=2;
    }else{
    offset=1;
    count++;
    }

    if (count==zdcd) {
    return str.substring(0, i+1);
    }
    if ((count==zdcd+1 && offset==2)) {
    return str.substring(0, i);
    }

    }
    return "";
    }

     

    }

    控制台输出结果:

    用GB2312编码截取字符串--【“我ABC汉DEF】3个字节的结果是【我A】
    用GB2312编码截取字符串--【“我ABC汉DEF】6个字节的结果是【我ABC】
    用GBK编码截取字符串--【“我ABC汉DEF】3个字节的结果是【我A】
    用GBK编码截取字符串--【“我ABC汉DEF】6个字节的结果是【我ABC】
    用GB18030编码截取字符串--【“我ABC汉DEF】3个字节的结果是【我A】
    用GB18030编码截取字符串--【“我ABC汉DEF】6个字节的结果是【我ABC】
    用CP936编码截取字符串--【“我ABC汉DEF】3个字节的结果是【我A】
    用CP936编码截取字符串--【“我ABC汉DEF】6个字节的结果是【我ABC】
    用CNS11643编码截取字符串--【“我ABC汉DEF】3个字节的结果是【我A】
    用CNS11643编码截取字符串--【“我ABC汉DEF】6个字节的结果是【我ABC】
    用UTF-8编码截取字符串--【“我ABC汉DEF】3个字节的结果是【我】
    用UTF-8编码截取字符串--【“我ABC汉DEF】6个字节的结果是【我ABC】
    输出指定字段长度的字符串:乌鲁木齐测试测试开发资源服务有限责任公司

     方法3:截取指定长度的字符串

    public class CharactersSplit {
    public static void main(String[] args) {
    String value="乌鲁a木齐 同盛人力资源服务有限责任公司达坂城分公司1A2b3";//24+6+2=32
    //value=getSubString(value,value.toCharArray().length);//乌鲁a木齐 同
    value=getSubString(value,89);
    //value=value.substring(0, 6);//乌鲁a木齐 同//这如果是89就会报下标越界
    System.out.println(value);
    }
    /**
    *Description:截取指定长度的字符串
    * 与字符串 substring 方法相比,可以规长度不够截取出现的下标越界等问题
    */
    public static String getSubString(String sOurce, int len) {
    if (sOurce.isEmpty()) {
    return "";
    }
    if (sOurce.length() <= len) {//32=32
    // sOurce.length()=value.toCharArray().length
    return sOurce;
    }
    return sOurce.substring(0, len);
    }
    }

    运行输出结果:乌鲁a木齐  同盛人力资源服务有限责任公司达坂城分公司1A2b3

    转载于:https://www.cnblogs.com/zhangqf/p/6212001.html

    展开全文
  • Java 字符串截取

    2020-01-12 17:03:06
    Java字符串截取的常用方法是subString(startInde)或者是subString(startIndex,endIndex) 运行以下代码: String str = "0123456789"; System.out.println("subString(startIndex)----------->"+str.substring...

    Java中字符串截取的常用方法是subString(startInde)或者是subString(startIndex,endIndex)

    运行以下代码:
    String str = "0123456789";
    System.out.println("subString(startIndex)----------->"+str.substring(3));
    System.out.println("subString(startIndex,endIndex)-->"+str.substring(2,9));

    结果:

    subString(startIndex)----------->3456789
    subString(startIndex,endIndex)-->2345678

    可以看到subString(startIndx)方法获取到的是从startIndex开始截取的字符串,直到字符串的最后一位;subString(startIndex,endIndex)方法获取到的从startIndex开始截取,但是并不包括endIndex的字符串。startIndex=2,endIndex=9,得到的是从2开始直到8,并不包括原字符串的‘9’.通过查看源码可以看到

    public String substring(int beginIndex) {
        if (beginIndex < 0) {
            throw new StringIndexOutOfBoundsException(beginIndex);
        }
        int subLen = value.length - beginIndex;
        if (subLen < 0) {
            throw new StringIndexOutOfBoundsException(subLen);
        }
        return (beginIndex == 0) ? this : new String(value, beginIndex, subLen);
    }

    subString(startIndex)方法会首先判断startIndex是不是小于0,然后判断需要截取的字符串的长度是否小于0,最后判断beginIndex是否等于0,如果等于0,结果就是原字符串。不等于0的话,新建一个字符串,在原字符串上从beginIndex开始截取一个长度等于(原字符串长度-beginIndex)的字符串。也可以当作从beginIndex开始直到最后的一个字符串。

    public String substring(int beginIndex, int endIndex) {
        if (beginIndex < 0) {
            throw new StringIndexOutOfBoundsException(beginIndex);
        }
        if (endIndex > value.length) {
            throw new StringIndexOutOfBoundsException(endIndex);
        }
        int subLen = endIndex - beginIndex;
        if (subLen < 0) {
            throw new StringIndexOutOfBoundsException(subLen);
        }
        return ((beginIndex == 0) && (endIndex == value.length)) ? this
                : new String(value, beginIndex, subLen);
    }

    subString(startIndex,endIndex)方法与subString(startIndex)相似,也是需要先判断startIndex是不是小于0,endIndex是不是大于原字符串的长度,注意endIndex可以等于原字符串的长度。然后判断需要截取的长度(endIndex-beginIndex)是否小于0.最后如果beginIndex=0,endIndex=原字符串的长度,那么结果就是原字符串,如果不是,就在原字符串上从beginIndex开始截取一个长度为(endIndex-beginIndex)的字符串。

    展开全文
  • Java字符串截取

    千次阅读 2019-04-26 17:47:26
    该子字符串从指定的 start 处开始,一直到索引 end - 1 处的字符。 参数: start - 起始索引(包含)。 end - 结束索引(不包含)。 可以理解为截取的长度。 返回: 新的字符串。 ...

    1、public String substring(int start,int end)
    返回一个新的 String,它包含此序列当前所包含的字符子序列。该子字符串从指定的 start 处开始,一直到索引 end - 1 处的字符。

    参数:
        start - 起始索引(包含)。 
        end - 结束索引(不包含)。 可以理解为截取的长度。
    返回:
        新的字符串。 
    

    示例:
    String abc = “《雪山飞狐》&金庸”;
    String str1 = abc.substring(0, 6);
    System.out.println(str1); //《雪山飞狐》

    2、public String substring(int start)
    返回一个新的 String,它包含此字符序列当前所包含的字符子序列。该子字符串始于指定索引处的字符,一直到此字符串末尾。

     参数:
    start - 起始索引(包含)。 
    返回:
    新的字符串。
    

    示例:
    String abc = “《雪山飞狐》&金庸”;
    String str2 = abc.substring(7);
    System.out.println(str2); //金庸

    3、public String[] split(String regex)
    根据给定 正则表达式的匹配拆分此字符串。

    示例:
    	String test = "abc.def.ghi";
    	//根据" . "号把字符串分成字符串类型的数组
    	String [] b = test.split("[.]");
    	
    	System.out.println(Arrays.toString(b));  //[abc, def, ghi]
    	//根据 数组的下标取值
    	String str1 = b[0];
    	String str2 = b[1];
    	String str3 = b[2];
    	System.out.println(str1);  // abc
    	System.out.println(str2);  // def
    	System.out.println(str3);  // ghi
    	
    	//当然也可以根据其他的符号将字符串分开  比如:/  :  @  等都可以
    
    展开全文
  • java字符串截取

    2019-09-20 09:48:28
    "前面的字符串: String a = " bb > cc " a.substring(0, a.indexOf(">")).trim() 2.截取">"后面的字符串: String a = " bb > cc " a.substring(a.indexOf(">")+1).trim() ...

    1.截取">"前面的字符串:

    String a = " bb > cc "
    a.substring(0, a.indexOf(">")).trim()

    2.截取">"后面的字符串:

    String a = " bb > cc "
    a.substring(a.indexOf(">")+1).trim()

     

    展开全文
  • Java字符串截取需要用到String类的substring()方法substring()方法:返回字符串的子字符串该方法的语法为:public String substring(int beginIndex)// 截取从beginIndex开始至字符串的末尾字符串public String ...
  • 主要介绍了java 字符串截取的实例详解的相关资料,这里提供了实例代码帮助大家实现这样的功能,需要的朋友可以参考下
  • java 字符串截取的实例详解题目在java中,字符串“abcd”与字符串“ab你好”的长度是一样,都是四个字符。但对应的字节数不同,一个汉字占两个字节。定义一个方法,按照指定的字节数来取子串。如:对于“ab你好”,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,616
精华内容 1,846
关键字:

java字符串截取

java 订阅