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

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

構造 pack n) -- com post nts throw ...

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)的構造方法把字節轉換成字符串

技術分享圖片

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