关于Java截取(内含代码)

编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。"但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”。
package com.yzg.SubString;/**
 * @BelongsProject: Demo01
 * @BelongsPackage: com.yzg.SubString
 * @Author: YangZhenGuang1
 * @Date: 2022/10/14 11:11
 * @Description: TODO
 */

import java.util.Scanner;

/**
 *@ClassName JavaSub
 *@Description TODO
 *@Author @yangzhenguang
 *@CreateTime: 2022/10/14 11:11
 *@Version 1.0
 */
public class JavaSub {
    //通過通过subString方法来进行字符串截取 放回字符串中的子字符串

    //第一种 传递一个参数  public String subString(int beginIndex);
    //从指定的 beginIndex 处开始,直到索引 endIndex - 1 处的字符。因此,该子字符串的长度为 endIndex-beginIndex。  public String substring(int beginIndex, int endIndex)
    public static void main(String[] args) {

        System.out.println("========================================通過通过subString方法来进行字符串截取 放回字符串中的子字符串");
        String Str = new String("hello wrold");
        System.out.print("返回值,从第4位截取到字符串末尾从0 开始 :");
        System.out.println(Str.substring(4));

        System.out.print("返回值,从第4位截取到第10位 不包括第10位:");
        System.out.println(Str.substring(4, 10));


        System.out.println("===================使用stringUtils的方法 ");
        System.out.println("===========题目");
        System.out.println(" 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 " +
                "但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”。");
        /*
         * @Description:
         判断是否为空
        不为空的话判断截取的字节数,如果字节数大于字符串长度,就设置为截取所有字节数的长度
        截半的话对应字节的ASC码为小于0的数值


        */

        Scanner scan = new Scanner(System.in);
        while (true) {
            String str1 = scan.next();
            int n = scan.nextInt();
            str_split(str1, n);
        }
    }
    public static void str_split (String str1,int n){
        if (str1 == null) {
            System.out.println("please input valid!");
            return;
        }
        int byte_all = 0;
        byte_all = str1.length();   //获取一下字符串的长度
        byte byte_[] = str1.getBytes(); //将分别返回“中”这个汉字在GBK、UTF-8和ISO8859-1编码下的byte数组表示,此时b_gbk的长度为2,b_utf8的长度为3,b_iso88591的长度为1。

        if (n > byte_all)  //如果输入的 截取数 大于字符串的长度
            n = byte_all;  // 直接返回全部的长度

        //System.out.println(byte_[n - 1] < 0);
        if (byte_[n - 1] < 0) {  //截半的话对应字节的ASC码为小于0的数值    比如说 一个汉字 是有三的长度,  我输入的 1 2 3  都会小于零 返回true
            System.out.println("n-1");
            System.out.println("subStrx==" + new String(byte_, 0, n - 1)); //重新转成字符串  简单的来说就是byte数组b从下标为n开始前进m个下标的那一段数组变为字符串item
        } else {
            System.out.println("n");
            System.out.println("subStrx==" + new String(byte_, 0, n));
        }

    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值