`

Java 按指定长度截取字符串,考虑全角半角

阅读更多

于用 Java 来截取指定长度的字符串,我在网上看到很多帖子和方法,大都是说用 substring() ,但是如果考虑到全角半角的话,这是怎么也达不到期望值的。因为之前自己也用到过,所以把自己整理好的一些东西拿出来,希望能和大家分享下。如果还有更好更简洁的方法,望大侠们指点一二。

 

注:所有测试都是基于该值已通过必须输入的检查。

1.  subByStrLenth() 在不考虑全角的情况下,即假定该字符串都是半角的。

2.  subByFullWidth() 如果已确保该值都是由全角字符,即字符都是全角且指定长度是大于 0 的偶数的情况下。

3.  subByStrByte() 考虑全角半角的截取,且舍掉半个汉字后,长度不足的情况下是否要在右边补空格。

// 按指定的长度来截取字符串,不管全角半角,一个字符一个长度。	
public static String subByStrLength(String value, int length) {

	return value.length() > length ? new String(value.substring(0, length)) : value;
}

// 按指定的长度来截取字符串,前提是字符串是全角的,指定长度是大于0的偶数。
public static String subByFullWidth(String value, int length) {

	return value.getBytes().length > length ? new String(value.getBytes(), 0, length) : value;
}

// 按指定的长度下,考虑字符的全角半角,且当舍掉最后半个汉字后,长度不足的情况下是否要在右边补空格。
public static String subByStrByte(String value, int length, boolean paddingSpace) {

	String valueTemp = "";

	// 指定的长度下,考虑字符的全角半角,最后的汉字。
	if (value.getBytes().length > length) {
		for (char c : value.toCharArray()) {
			if (valueTemp.getBytes().length <= length) {
				valueTemp += c;

				if (valueTemp.getBytes().length == length) {
					break;

				} else if (valueTemp.getBytes().length > length) {
					char[] charTemp = valueTemp.toCharArray();
					valueTemp = "";

					for (int i = 0; i < charTemp.length - 1; i++) {
						valueTemp += charTemp[i];
					}

					break;
				}
			}
		}
		value = valueTemp;
	}

	// 指定的长度下,长度不足的情况是否要在右边补空格。
	if (paddingSpace) {
		StringBuffer valueBuffer = new StringBuffer(value);
		for (int i = 0; i < length - value.getBytes().length; i++) {
			valueBuffer.append(" ");
		}

		return valueBuffer.toString();
	}

	return value;
}

// 字符串的截取测试
public static void main(String[] args) {

	String str1 = "字符串的截取";
	String str2 = "字符串的截取test";

	System.out.println(subByStrByte(str2, 7, true));
	System.out.println(subByStrByte(str2, 7, false));

	System.out.println(subByStrLength(str2, 7));
	System.out.println(subByFullWidth(str1, 6));
}

 

 

第一个输出结果是带空格的字符串“字符串 ”。

运行结果:

 

字符串

字符串

字符串的截取 t

字符串

 

 

 

0
0
分享到:
评论

相关推荐

    前后台实现精确截取指定长度字符串(考虑全角半角)

    根据提供的文件信息,本文将详细解释如何在前后端开发中实现对字符串进行精确截取,同时考虑到全角和半角字符的区别。这个问题在处理多语言环境下的文本时尤为重要,因为不同语言中的字符宽度可能有所不同,这直接...

    截取指定长度的字符串

    在实际应用中,我们可能还需要考虑一些边缘情况,例如当截取的长度超过了字符串的实际长度,这时通常会返回整个字符串或者空字符串,具体取决于编程语言的实现。 标签“字符串 截取”提示我们关注的重点在于理解和...

    C# 按照字节长度截取字符串

    总的来说,按照字节长度截取字符串需要考虑字符编码的影响,通过`Encoding`类处理字符串的字节表示,并结合正则表达式进行精确截取。在实际应用中,确保对字符串编码的理解和处理方式的正确性至关重要,以避免可能...

    对全角半角字符串的处理

    ### 对全角半角字符串的处理 在计算机编程与数据处理领域中,全角和半角字符的区别及其转换是一项常见的需求。特别是在东亚语言环境中(如中文、日文、韩文等),这种转换对于文本处理至关重要。 #### 全角与半角...

    java编写一个截取字符串的函数,输入为一个字符串和字节数.docx

    Java 字符串截取函数 ...本例中,我们实现了一个 Java 字符串截取函数,该函数可以截取指定字节的字符串,并保证汉字不被截半个。该函数使用 `substring` 方法来实现字符串截取,并且可以应用于各种字符串处理场景。

    C#区分中英文按照指定长度截取字符串的方法

    本文实例讲述了C#区分中英文按照指定长度截取字符串的方法。分享给大家供大家参考。具体如下: 这段C#代码用于按照指定的长度截取字符串,一个中文字符算2个字符,按照这个方法截取的字符串基本可以保持显示长度一致...

    按byte截取字符串

    本篇文章将详细探讨“按byte截取字符串”这一技术点,并通过两个Java文件——SliceByByteTest.java和SliceByByte.java的实例来阐述其实现方法。 首先,我们需要理解字符串在计算机内存中的存储方式。在Java中,字符...

    oracle按特定字符截取字符串

    oracle,按特定字符,截取字符串,直接出结果 oracle,按特定字符,截取字符串,直接出结果oracle,按特定字符,截取字符串,直接出结果

    jsp页面截取字符串

    在JavaServer Pages (JSP) 中,字符串截取是一项常见的任务,特别是在处理用户输入或显示数据时。JSP 提供了内置对象和脚本元素来处理字符串操作,其中包括字符串截取。下面我们将深入探讨如何在 JSP 页面中进行字符...

    delphi 实现截取字符串中中文+英文混合截取

    这个函数`SafeSubstring`接收字符串S、起始字节位置StartByte和截取的字节数LenBytes,返回一个从指定字节位置开始,长度为LenBytes字节的新字符串。注意,这个函数假设输入的都是有效的字节位置,没有进行边界检查...

    按字节长度截取字符串(支持截取带HTML代码样式的字符串)

    如果单纯按字符长度截取,可能会导致截取到半字符,从而破坏字符串的读取。因此,按照字节长度截取可以确保正确处理多字节字符。 C#中的`string`类提供了多种截取方法,如`Substring()`,但这些方法默认是基于...

    字符串按照指定的字节数来截取

    字符串是由字符组成的序列,而“字符串按照指定的字节数来截取”这个话题,就是指如何在字符串中提取固定字节数的部分。在不同的编程语言中,都有相应的函数或方法来实现这一功能。 在Python中,可以使用内置的`...

    JAVA如何按字节截取字符串

    在进行Java编程时,我们经常会遇到需要按字节截取字符串的情况,尤其是在数据传输、网络通信以及对数据进行存储处理的时候。由于计算机内部存储和处理的都是二进制数据,对于非英文字符,在不同的编码(如UTF-8、GBK...

    C#字符串截取固定长度的方法

    最直接的方式是使用`Substring`方法来截取指定长度的字符串。这种方法适用于纯英文或单字节字符组成的字符串。 ```csharp public static string CutString(string inputString, int len) { if (inputString.Length...

    Java精确截取字符串.doc

    在Java编程中,有时我们需要对字符串进行精确截取,特别是在处理中文字符时,由于中文字符在内存中通常以双字节形式存储,因此简单的按照字符数截取可能会导致汉字被分割,影响显示效果。这个问题在文档标题“Java...

    关于java按字节截取带有汉字的字符串的解法

    在Java编程语言中,处理带有汉字的字符串时,由于汉字占据多个字节,按照字节进行截取可能会导致汉字被不完整地分割,从而产生乱码。为了解决这个问题,我们需要理解Unicode编码以及如何在Java中正确处理多字节字符...

    java中如何截取字符串.txt

    根据提供的文件信息,本文将详细解释Java中截取字符串的各种方法及其使用场景,并结合部分示例代码进行说明。 ### Java中截取字符串的方法 在Java编程语言中,字符串的处理是一项非常重要的技能,特别是在开发中...

    截取字符串

    在编程领域,字符串操作是一项基础且重要的任务,而“截取字符串”是其中的一个关键功能。这个小demo展示了如何在不同的编程环境中实现字符串截取,同时也涉及到字符串的空格处理。接下来,我们将深入探讨这两个主题...

    go语言按显示长度截取字符串的方法

    这里我们探讨的主题是如何按显示长度来截取字符串,这在处理多语言文本时尤其重要,因为不同字符集(如UTF-8)中的字符长度可能不一致。在UTF-8编码下,一个英文字符通常占用1个字节,而一个汉字则可能占用1到3个...

    详解C++ string常用截取字符串方法

    本文将详细解析两种常用的C++ `std::string`截取字符串的方法:`find`和`find_last_of`,以及如何结合使用它们来满足各种字符串处理需求。 1. `find`方法: `find`方法用于在字符串中查找指定子字符串`strSub`的第...

Global site tag (gtag.js) - Google Analytics