java字符串字节长度截取问题 java认证:如何按字节长度截取字符串

java\u5b57\u7b26\u4e32\u5b57\u8282\u957f\u5ea6\u95ee\u9898

Java\u8bed\u8a00\u5185\u90e8\u7684char\u662f\u4f7f\u7528unicode\u7f16\u7801\uff0cUTF-16\uff0c\u6240\u4ee5\u90fd\u662f\u4e24\u5b57\u8282\u3002

getBytes\u540e\uff0c\u5b9e\u9645\u4e0a\u662f\u8f6c\u6362\u6210\u6307\u5b9a\u7684\u7f16\u7801\u5b57\u7b26\u96c6\u3002

\u4e0d\u6307\u5b9a\u65f6\uff0c\u4e00\u822c\u7528\u672c\u5730\u5b57\u7b26\u96c6\uff0c\u901a\u5e38\u662fGBK\u3001ACSII\u7b49\uff0c\u5728\u8fd9\u4e9b\u5b57\u7b26\u96c6\u4e2d\uff0c\u82f1\u6587\u90fd\u662f\u5355\u5b57\u8282\u7684\uff0c\u6240\u4ee5\u4f1a\u51fa\u73b0\u8fd9\u6837\u7684\u95ee\u9898\u3002

\u7f16\u7a0b\uff1a\u7f16\u5199\u4e00\u4e2a\u622a\u53d6\u5b57\u7b26\u4e32\u7684\u51fd\u6570\uff0c\u8f93\u5165\u4e3a\u4e00\u4e2a\u5b57\u7b26\u4e32\u548c\u5b57\u8282\u6570\uff0c\u8f93\u51fa\u4e3a\u6309\u5b57\u8282\u622a\u53d6\u7684\u5b57\u7b26\u4e32\u3002public static String substring\uff08String str\uff0c int toCount\uff0cString more\uff09{int reInt = 0;String reStr = \u201c\u201d;if \uff08str == null\uff09return \u201c\u201d;char\uff3b\uff3d tempChar = str.toCharArray\uff08\uff09;for \uff08int kk = 0; \uff08kk \u300a tempChar.length && toCount \u300b reInt\uff09; kk++\uff09 {String s1 = str.valueOf\uff08tempChar\uff3bkk\uff3d\uff09;byte\uff3b\uff3d b = s1.getBytes\uff08\uff09;reInt += b.length;reStr += tempChar\uff3bkk\uff3d;}if \uff08toCount == reInt || \uff08toCount == reInt - 1\uff09\uff09reStr += more;return reStr;}Web\u5e94\u7528\u7a0b\u5e8f\u5728\u6d4f\u89c8\u5668\u4e2d\u663e\u793a\u5b57\u7b26\u4e32\u65f6\uff0c\u7531\u4e8e\u663e\u793a\u957f\u5ea6\u7684\u9650\u5236\uff0c\u5e38\u5e38\u9700\u8981\u5c06\u5b57\u7b26\u4e32\u622a\u53d6\u540e\u518d\u8fdb\u884c\u663e\u793a\u3002\u4f46\u76ee\u524d\u5f88\u591a\u6d41\u884c\u7684\u8bed\u8a00\uff0c\u5982C#\u3001Java\u5185\u90e8\u91c7\u7528\u7684\u90fd\u662f Unicode 16\uff08UCS2\uff09\u7f16\u7801\uff0c\u5728\u8fd9\u79cd\u7f16\u7801\u4e2d\u6240\u6709\u7684\u5b57\u7b26\u90fd\u662f\u4e24\u4e2a\u5b57\u7b26\uff0c\u56e0\u6b64\uff0c\u5982\u679c\u8981\u622a\u53d6\u7684\u5b57\u7b26\u4e32\u662f\u4e2d\u3001\u82f1\u6587\u3001\u6570\u5b57\u6df7\u5408\u7684\uff0c\u5c31\u4f1a\u4ea7\u751f\u95ee\u9898\uff0c\u5982\u4e0b\u9762\u7684\u5b57\u7b26\u4e32\uff1aString s = \u201ca\u52a0b\u7b49\u4e8ec\uff0c\u5982\u679ca\u7b491\u3001b\u7b49\u4e8e2\uff0c\u90a3\u4e48c\u7b493\u201d;\u4e0a\u9762\u7684\u5b57\u7b26\u4e32\u65e2\u6709\u6c49\u5b57\uff0c\u53c8\u6709\u82f1\u6587\u5b57\u7b26\u548c\u6570\u5b57\u3002\u8981\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\u7684\u65b9\u6cd5\u662f\u9996\u5148\u5f97\u5230\u8be5\u5b57\u7b26\u4e32\u7684UCS2\u7f16\u7801\u7684\u5b57\u8282\u6570\u7ec4\uff0c\u5982\u4e0b\u9762\u7684\u4ee3\u7801\u5982\u4e0b\uff1abyte\uff3b\uff3d bytes = s.getBytes\uff08\u201dUnicode\u201c\uff09;\u7531\u4e8e\u4e0a\u9762\u751f\u6210\u7684\u5b57\u8282\u6570\u7ec4\u4e2d\u524d\u4e24\u4e2a\u5b57\u8282\u662f\u6807\u5fd7\u4f4d\uff0cbytes\uff3b0\uff3d = -2\uff0cbytes\uff3b1\uff3d = -1\uff0c\u56e0\u6b64\uff0c\u8981\u4ece\u7b2c\u4e09\u4e2a\u5b57\u8282\u5f00\u59cb\u626b\u63cf\uff0c\u5bf9\u4e8e\u4e00\u4e2a\u82f1\u6587\u6216\u6570\u5b57\u5b57\u7b26\uff0cUCS2\u7f16\u7801\u7684\u7b2c\u4e8c\u4e2a\u5b57\u8282\u662f\u76f8\u5e94\u7684ASCII\uff0c\u7b2c\u4e00\u4e2a\u5b57\u8282\u662f0\uff0c\u5982a\u7684UCS2\u7f16\u7801\u662f0 97\uff0c\u800c\u6c49\u5b57\u4e24\u4e2a\u5b57\u8282\u90fd\u4e0d\u4e3a0\uff0c\u56e0\u6b64\uff0c\u53ef\u4ee5\u5229\u4e8eUCS2\u7f16\u7801\u7684\u8fd9\u4e2a\u89c4\u5219\u6765\u8ba1\u7b97\u5b9e\u9645\u7684\u5b57\u8282\u6570\uff0c

contentSummanry = contentSummanry.substring(0,100); 这就是说我要截取前面一百个字符

同学 这是最好的截取了 你试试
contentSummanry就是你要去里面截取的字符串 看看这里吧:
public class CutString {

/**
* 判断是否是一个中文汉字
*
* @param c
* 字符
* @return true表示是中文汉字,false表示是英文字母
* @throws UnsupportedEncodingException
* 使用了JAVA不支持的编码格式
*/
public static boolean isChineseChar(char c)
throws UnsupportedEncodingException {
// 如果字节数大于1,是汉字
// 以这种方式区别英文字母和中文汉字并不是十分严谨,但在这个题目中,这样判断已经足够了
return String.valueOf(c).getBytes("GBK").length > 1;
}

/**
* 按字节截取字符串
*
* @param orignal
* 原始字符串
* @param count
* 截取位数
* @return 截取后的字符串
* @throws UnsupportedEncodingException
* 使用了JAVA不支持的编码格式
*/
public static String substring(String orignal, int count)
throws UnsupportedEncodingException {
// 原始字符不为null,也不是空字符串
if (orignal != null && !"".equals(orignal)) {
// 将原始字符串转换为GBK编码格式
orignal = new String(orignal.getBytes(), "GBK");
// 要截取的字节数大于0,且小于原始字符串的字节数
if (count > 0 && count < orignal.getBytes("GBK").length) {
StringBuffer buff = new StringBuffer();
char c;
for (int i = 0; i < count; i++) {
// charAt(int index)也是按照字符来分解字符串的
c = orignal.charAt(i);
buff.append(c);
if (CutString.isChineseChar(c)) {
// 遇到中文汉字,截取字节总数减1
--count;
}
}
return buff.toString();
}
}
return orignal;
}

public static void main(String[] args) {
// 原始字符串
String s = "我ZWR爱JAVA";
System.out.println("原始字符串:" + s);
try {
System.out.println("截取前1位:" + CutString.substring(s, 1));
System.out.println("截取前2位:" + CutString.substring(s, 2));
System.out.println("截取前4位:" + CutString.substring(s, 4));
System.out.println("截取前6位:" + CutString.substring(s, 6));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
}

例如String s="Hello world";

String subStri=s.subString(0,5);//这里将会获得Hello

subString是string类的一个截取字符串的方法,方法里面第一个参数是从第几位开始截取,后面的那个参数是截取到第几位(但不包含这一位的字符)。

public String substring(int beginIndex,int endIndex)
返回一个新字符串,它是此字符串的一个子字符串。该子字符串从指定的 beginIndex 处开始,直到索引 endIndex - 1 处的字符。因此,该子字符串的长度为 endIndex-beginIndex。
示例:

"hamburger".substring(4, 8) returns "urge"
"smiles".substring(1, 5) returns "mile"

String ss = "我是我牛牛";
String ss2 = "12345";
byte[] b = ss.getBytes();
byte[] b2 = ss2.getBytes();
System.out.println(b.length);
System.out.println(b2.length);

=====================
10
5

是这个意思吧

先使用getByes,然后用length
比如
String str ="我是牛牛牛";
str.getBytes().length

  • java瀛楃涓插瓧鑺傞暱搴︽埅鍙栭棶棰
    绛旓細public static void main(String[] args) { // 鍘熷瀛楃涓 String s = "鎴慫WR鐖JAVA";System.out.println("鍘熷瀛楃涓诧細" + s);try { System.out.println("鎴彇鍓1浣嶏細" + CutString.substring(s, 1));System.out.println("鎴彇鍓2浣嶏細" + CutString.substring(s, 2));System.out....
  • JAVA涓:涓嫳鏂囨贩鍚堢殑瀛楃涓鎸瀛楄妭鎴彇闂
    绛旓細鍙互鍐欎釜灏忕殑绠楁硶,姣忔鍙栬繖涓寖鍥村唴鐨瀛楃鍒ゆ柇,鐒跺悗鍐嶅彇涓鍗婃牴鎹ぇ灏忓垽鏂.姣斿:10000涓彲浠ュ厛鐢╯ubstring鎴7500涓瓧绗(鏈灏5000,鏈澶10000,鍙栦竴鍗),鐒跺悗鏍规嵁瀛楄妭鏁澶у皬,鍐嶆寜涓鍗婄殑鏂瑰紡杩涜鎴(濡傛灉姣10000瀛楄妭灏,灏卞彇5000-7500涓棿鐨 ,濡傛灉澶,灏卞彇7500-10000),渚濇绫绘帹灏卞彲浠ヤ簡锛岀洿鍒板彇寰楃粨鏋.杩欐牱搴旇...
  • java涓浣曞湪鏈煡闀垮害瀛楃涓涓鎴彇涓娈靛瓧绗
    绛旓細java涓埅鍙栨湭鐭闀垮害瀛楃涓涓昏鏄娇鐢⊿tring绫伙紝绀轰緥濡備笅锛/** * @author cn * @param s 瑕佹埅鍙栫殑瀛楃涓 * @param length 瑕鎴彇瀛楃涓鐨勯暱搴->鏄瀛楄妭涓涓眽瀛2涓瓧鑺 * return 杩斿洖length闀垮害鐨勫瓧绗︿覆锛堝惈姹夊瓧锛*/private static String getTitleToTen(String s, int length) throws Exception ...
  • java 鎿嶄綔瀛楃涓鏃,鎬庝箞鑾峰緱鏁翠釜瀛楃涓4瀛楄妭闀垮害?
    绛旓細涓涓眽瀛2涓瀛楄妭鍟婏紝灏辨槸杩欎釜鐗规畩鎯呭喌鍚rivate int native2ascii ( String nativecode ){char[] natives = nativecode.toCharArray ();int len = 0;for ( int i = 0; i < natives.length; i++ ){int code = String.valueOf (natives[i]).codePointAt (0);if (code > 127){String c...
  • java瀛楃涓插瓧鑺傞暱搴﹂棶棰
    绛旓細Java璇█鍐呴儴鐨刢har鏄娇鐢╱nicode缂栫爜锛孶TF-16锛屾墍浠ラ兘鏄袱瀛楄妭銆俫etBytes鍚庯紝瀹為檯涓婃槸杞崲鎴愭寚瀹氱殑缂栫爜瀛楃闆嗐備笉鎸囧畾鏃讹紝涓鑸敤鏈湴瀛楃闆嗭紝閫氬父鏄疓BK銆丄CSII绛夛紝鍦ㄨ繖浜涘瓧绗﹂泦涓紝鑻辨枃閮芥槸鍗曞瓧鑺傜殑锛屾墍浠ヤ細鍑虹幇杩欐牱鐨闂銆
  • java涓庝箞杩涜byte瀛楄妭闀垮害鎴彇
    绛旓細substring(int,int)
  • JAVA涓浣曟寜瀛楄妭鎴彇瀛瀛楃涓
    绛旓細substr 鏂规硶鐢ㄤ簬杩斿洖涓涓粠鎸囧畾浣嶇疆寮濮嬬殑鎸囧畾闀垮害鐨勫瓙瀛楃涓銆傝娉 stringObject.substr(start [, length ])
  • java鎬庢牱鑾峰彇瀛楃涓鐨瀛楄妭鏁
    绛旓細瀛楃涓鏄彲浠ヨ浆鍙樻垚瀛楄妭鏁扮粍锛岀劧鍚庣粺璁′竴涓嬪瓧鑺傛暟缁勭殑闀垮害鍗冲彲锛屽弬鑰冨涓嬩唬鐮侊細Java璇█涓紝涓枃瀛楃鎵鍗犵殑瀛楄妭鏁鍙栧喅浜庡瓧绗︾殑缂栫爜鏂瑰紡锛屼竴鑸儏鍐典笅锛岄噰鐢↖SO8859-1缂栫爜鏂瑰紡鏃讹紝涓涓腑鏂囧瓧绗︿笌涓涓嫳鏂囧瓧绗︿竴鏍峰彧鍗1涓瓧鑺傦紱閲囩敤GB2312鎴朑BK缂栫爜鏂瑰紡鏃讹紝涓涓腑鏂囧瓧绗﹀崰2涓瓧鑺傦紱鑰岄噰鐢║TF-8缂栫爜鏂瑰紡鏃讹紝...
  • 鐢java 缂栧啓涓涓鎴彇瀛楃涓鐨勫嚱鏁,杈撳叆涓轰竴涓瓧绗︿覆鍜瀛楄妭鏁,杈撳嚭涓烘寜...
    绛旓細package com.itheima; /** * 10銆 缂栧啓涓涓鎴彇瀛楃涓鐨勫嚱鏁帮紝杈撳叆涓轰竴涓瓧绗︿覆鍜瀛楄妭鏁锛岃緭鍑轰负鎸瀛楄妭鎴彇鐨勫瓧绗︿覆銆 * 浣嗘槸瑕佷繚璇佹眽瀛椾笉琚埅鍗婁釜锛屽鈥滄垜ABC鈥4锛屽簲璇ユ埅涓衡滄垜AB鈥濓紝杈撳叆鈥滄垜ABC姹塂EF鈥濓紝6锛屽簲璇ヨ緭鍑轰负鈥滄垜ABC鈥濊屼笉鏄滄垜ABC+姹夌殑鍗婁釜鈥濄 * * @author 2811...
  • 璇风敤Java瀹炵幇瀵逛竴涓瀛楃涓鎸夋瘡64涓瀛楄妭鍒嗗壊瀛樺叆鏁扮粍涓
    绛旓細char 16浣嶏紝2涓瀛楄妭 閭e氨鏄埅32涓暟 鎴戣繖閲屽啓浜嗕釜娴嬭瘯绫 public class Test{ public static void main(String[] args) { String[] arr=new String[100];Scanner scanner=new Scanner(System.in);String str=scanner.next();int num=3;int count=str.length()/num;for (int i = 0; i <...
  • 扩展阅读:java截取字符串后两位 ... java字符串截取前四位 ... java截取字符串首字母 ... java截取特定字符串 ... substring截取字符串 ... java中计算字符串长度 ... java截取字符串的一段 ... java字符串长度怎么数 ... java截取字符串中的一部分 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网