根据指定字节位数截取字符串

按字节截取字符串

    今天从朋友那得知了一个问题,根据指定的字节位数截取字符串。

    刚拿到这个问题之后,有一点思路,就是普通字符占一个字节,像数字和字母,但是中文字符一般占两个字节或者三个字节。比如,在utf8的编码格式下,中文占三个字节,在gbk模式下中文占两个字节,这就需要先来辨别一下当前的字符集编码格式。

    当然,有了前边这些思路,之后就是需要判断当前字节到底是中文还是数字或者字母,因为作者目前还是一个菜鸟,所以百度上去查了一下,原来中文的自己ASCII码是负数,英文和数字的ASCII码是正数,那这就好办了。

 

废话不多说,代码如下,希望对大家有所帮助,当然有错误和可以有优化的地方,还望大佬们指正。

勿喷~~~

    

public class SubStringByByteNumUtil {

	/*public static void main(String[] args) {
		String s = "我ew爱你";
		subString(s, 6);
	}*/

	private static void subString(String str, int num) {
		if (str.isEmpty() || 0 == str.length()) {
			return;
		}
		if (num > str.getBytes().length) {
			num = str.getBytes().length;
		}
		int count = 0;
		byte[] arr = str.getBytes();
		for (int i = 0; i < num; i++) {
			if (arr[i] < 0) {
				count++;
				if (count == getEncodeType()) {
					count = 0;
				}
			}
		}

		System.out.println(new String(arr, 0, num - count));
	}
	 /**
     * 判断编码格式,并返回当前编码的一个汉字所占字节
     * 
     * @return
     */
	private static int getEncodeType() {
		String encoding = System.getProperty("file.encoding");
		if (encoding.equalsIgnoreCase("utf-8")) {
			return 3;
		} else {
			return 2;
		}
	}
}

 

不同的编程语言有不同的字符串截取前面几位的方法,以下是几种常见语言的实现方式: - **Java**:虽然未直接提供截取前几位的示例,但可通过`substring`方法实现。例如,若要截取字符串前`n`位,可使用`str.substring(0, n)`,其中`str`是目标字符串,`n`是要截取位数。 - **C语言**:可以使用`strncpy`函数。示例代码如下: ```c #include <stdio.h> #include <stdlib.h> char *mystrncpy(const char *string, int n) { char *p = string; if (p == NULL) { return NULL; } else { int i = 0; while (*p != '\0') { if (i == n) { break; } i++; p++; } *(p++) = '\0'; return string; } } int main() { char str[50] = "hello world"; printf("%s\n", mystrncpy(str, 3)); printf("Hello world!\n"); return 0; } ``` 此代码定义了`mystrncpy`函数,用于截取字符串前`n`位,在`main`函数中调用该函数截取字符串`"hello world"`的前3位并输出 [^2]。 - **JavaScript**:使用`String`对象的`substring`方法。示例代码如下: ```javascript let str = "Hello, World!"; let result = str.toString().substring(0, 5); console.log(result); // 输出: Hello ``` 此代码使用`substring(0, 5)`截取字符串`"Hello, World!"`的前5位并输出 [^3]。 - **Linux**:在Linux下可使用`cut`命令。对于单字节字符,`-b`和`-c`作用类似,但文本中有中文时,`-c`可正确输出汉字,而`-b`可能输出乱码,通常`-b`和`-n`配合使用,`-n`用于指定截取字节数。例如,要截取字符串前20位,可根据具体情况使用合适的选项 [^4]。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值