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 void main(String[] args) {
10         Scanner sc = new Scanner(System.in);
11         System.out.println("字符串:");
12         String str = sc.nextLine();
13         System.out.println("输入截取字节数:");
14         int count = sc.nextInt();
15         getSubStrByByte(str, count);
16
17     }
18
19     /**
20      * @param str     接收输入的中英文字符串
21      * @param byteLen 接收要截取的字节数
22      */
23     public static void getSubStrByByte(String str, int byteLen) {
24         byte[] bytes = str.getBytes();
25         int count = 0;   //已经遍历出的字节数
26         String tempStr = "";  //最终输出字符串
27         List<Byte> list = new ArrayList<Byte>();  //临时存放一个中文每一个字节的列表
28         for (byte b : bytes) {
29             if (b >= 0) {//大于等于0表示英文
30                 tempStr += new String(new byte[]{b}); //直接追加到输出字符串
31                 count++;
32             } else {
33                 list.add(b);   //小于0表示中文,并将字节添加到临时列表中
34                 if (list.size() == 3) {  //当列表长度为3时,先转换为字符数组,再转为字符并追加到输出字符串
35                     byte[] temp = new byte[3];
36                     int i = 0;
37                     for (Byte l : list) {
38                         temp[i] = (byte) l;
39                         i++;
40                     }
41                     tempStr += new String(temp);
42                     count += 2;  //一个中文字节数加2
43                     list.clear(); //清空临时列表
44                 }
45             }
46             if (count == byteLen) {   //当遍历的字节数等于需要截取的字节数时则输出,并跳出循环
47                 System.out.println(tempStr);
48                 break;
49             }
50             //当遍历的字节数减需要截取的字节数=1时则说明最后一个字符为中文,输出并跳出循环
51             else if ((count - byteLen == 1)) {
52                 System.out.println(tempStr.substring(0, tempStr.length() - 1));
53                 break;
54             }
55         }
56     }
57 }
时间: 2024-08-02 18:54:21

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

C#中如何按字节数截取字符串?

今天要截取一个文档,发现C#中substring默认是将汉字当一个字节来截取的,但是我需要把汉字按照2个字节来算. 比如: str="雪洁hello" 我想要前5个字节的字符,也就是"雪洁h". 如何处理? C#中substring默认是将汉字当一个字节来截取的,那么如何按字节数截取字符串? 答案: using System; using System.Collections.Generic; using System.Web; using System.Web.U

【Java】把字节数B转化为KB、MB、GB的方法

在文件处理的系统中,很容易就能通过一些系统自带的方法取出其大小,问题是这个大小往往只是一个字节数B. 如果要把这个字节数转化为KB.MB.GB的最终呈现给用户,则涉及到整除与取余的算术运算. 方法如下: public static String getPrintSize(long size) { //如果字节数少于1024,则直接以B为单位,否则先除于1024,后3位因太少无意义 if (size < 1024) { return String.valueOf(size) + "B&quo

字节数截取字符串

public class ByteSub { public static void subString(String str, int a) { int bytes = 0; String result = ""; for (int x = 0; x < str.length(); x++) { byte[] b = (str.charAt(x) + "").getBytes(); bytes += b.length; if (bytes > a) {

c# 判断字符是否是全角, 获取字符串的字节数 , 获取字符串指定长度字节数的字符串

1 Encoding.Default.GetByteCount(checkString);  =2 全角 =1 半角 /// <summary> /// 获取字符串的字节长度 /// </summary> /// <param name="str"></param> /// <returns></returns> public static int GetStringByteLength(this string s

截取指定长度字节数后的字符串(Java方法实例,注:同样思路js也适用)

可能之前是习惯了上网查看其他人的资料,当我遇到这样的问题的时候,我第一时间想到的就是上网查个现成的方法直接用:可是查阅网上各大论坛以及其他资料之后,发现大部分人都是照搬其他人的,这种情况很严重,而且个人感觉很不利于个人技术的成长:当然更重要的原因是,我感觉网上的大部分方法都把问题给复杂化了,无论是用js方法截取还是通过封装Java类,都感觉繁琐了些:为此我自己写了个相对来说较为简单的方法,其实很简单的思路和方法就能实现,下面奉上我自己的方法,希望大家多多指正不足之处(支持全角输入的字符和汉字等,

面试题之java 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 要求不能出现截半的情况

题目:10. 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串. 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”. 一.需要分析 1.输入为一个字符串和字节数,输出为按字节截取的字符串-------------->按照字节[byte]截取操作字符串,先将String转换成byte类型 .2.汉字不可以截半----------------------------------

EditText字符限制-字节数限制-一次截取超过限制部分

EditText字符限制-字节数限制-一次截取超过限制部分 一.需求描述: 转载请注明出处:http://www.cnblogs.com/wangqx/p/6096272.html 对EditText字符个数限制,当用户输入字符串超长度过指定值时,不允许输入,并给出提示. 二.实现描述: 看了网上关于EditText字符串限制的一些例子,但都过于简单,不是想要的,故自己实现了下. 和网上例子功能对比: 1.此demo是对字符字节数的限制,无需区分是中文还是英文,相比对字符个数的限制, 对字节数限

java中各种数据类型占用字节数

1字节(Byte)=8bit java的基本类型 类型 所占字节 byte 1 short 2 int 4 long 8 float 4 double 8 char 2 String中字母和汉字所占字符是不一样的,并且与编码有关 英文字母:A 字节数 编码 1 GB2312 1 GBK 1 GB18030 1 ISO-8859-1 1 UTF-8 4 UTF-16 2 UTF-16BE 2 UTF-16-LE 中文汉字:我 字节数 编码 1 GB2312 2 GBK 2 GB18030 1 IS

JS 判断字串字节数,并截取长度

JS 判断字串字节数,并截取长度 var matchWords; function notifyTextLength() { var inputNum = document.getElementById("txtTitle").value.replace(/[^\x00-\xff]/g, "**").length; //得到输入的字节数 if (inputNum <= 200) { matchWords = document.getElementById(&q