java算法面試題:編寫一個截取字符串的函數,輸入為一個字符串和字節數,輸出為按字節截取的字符串,但要保證漢字不被截取半個, 如“我ABC”,4,應該截取“我AB”,輸入“我ABC漢DEF”,6,應該輸出“我ABC”,而不是“我ABC+漢的半個”。


package com.swift;

import java.util.Scanner;

public class Hanzi_jiequ {

    public static void main(String[] args) {
        /*
         * 編寫一個截取字符串的函數,輸入為一個字符串和字節數,輸出為按字節截取的字符串,但要保證漢字不被截取半個,
         * 如“我ABC”,4,應該截取“我AB”,輸入“我ABC漢DEF”,6,應該輸出“我ABC”,而不是“我ABC+漢的半個”。
         */

        Scanner scan=new Scanner(System.in);
        while(true) {
            System.out.println("請輸入一個帶中文的字符串,和要截取的字節數:");
            String str=scan.next();
            int num=scan.nextInt();
            
            byte[] buf=str.getBytes();
            if(num<=buf.length) {
                System.out.println("輸入正確,即將截取字符串...");
                int times=0;
                for(int i=0;i<num;i++) {
                    if(buf[i]<0) {
                        times++;
                    }
                }
                if(times%2==1) {
                    num--;
                }
                String out=new String(buf,0,num);//字節轉成字符串
                System.out.println("截取的字符串是:"+out);
                System.out.println();
            }else {
                try {
                    throw new MyException("截取字節數超出字符串長度...");
                } catch (MyException e) {
                    e.printStackTrace();
                }
            }
        }
        
    }
}

class MyException extends Exception{
    public MyException(String msg) {
        super(msg);
    }
}

字符串打散成字節之后輸出的字節值變成了正數和負數,字符為一個正數,漢字為兩個負數

所以為了不輸出半個漢字,可以判斷負數的個數,然后確定截取數到底是多少,通過new String(buf,0,len)的構造方法把字節轉換成字符串

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM