Java 截取字符串算法

使用StringUtils ,以第一个”e”,为标准截取c 之前的字符串

String s = StringUtils.substringBefore("abcdabcoph", "c");
System.out.println(s);
输出结果:ab

以最后一个“e”为准,截取c 之前的字符串

String s = StringUtils.substringBeforeLast("abcdabcoph", "c");
System.out.println(s);
输出结果:abcdab

StringUtils里面的好用API

//与第一种方法效果一样
StringUtils.substring("hello world", 4);     // 返回值,从第4位截取到字符串末尾 : o wrold
StringUtils.substring("hello world", 4, 10); // 返回值,从第4位截取到第10位    :   o wrol

//截取某个字符串之前的字符
StringUtils.substringBefore("hello world", "l"); 
//结果是:he          这里是以第一个”l”,为标准。
StringUtils.substringBeforeLast("hello world", "l");
//结果为:hello wor   这里以最后一个“l”为准。

//截取某个字符串之后的字符
StringUtils.substringAfter("hello world", "l");
//结果是:lo world   这里是以第一个”l”,为标准。
StringUtils.substringAfterLast("hello world", "l");
//结果为:d          这里以最后一个“l”为准。

//截取两个字符串之间隔的字符
StringUtils.substringBetween("hello world", "o");    
//结果是: w   两个o之间的字符串。   
StringUtils.substringBetween("hello world", "l", "r"); 
//结果是: lo wo   第一个字符“l”与第一个字符“r”之间的字符串   
StringUtils.substringsBetween("hello world", "l", "r");
//结果是:数组 [lo wo]   第一个字符“l”与第一个字符“r”之间的字符串,以数组形式返回。   

### Java 按字节截取字符串实现方法 在 Java 中按字节截取字符串时,需要注意不同字符(如汉字和英文字母)所占的字节数可能不同。为了确保不会出现中文或其他多字节字符被截断的情况,可以采用逐字符计算的方式进行处理。 以下是基于引用中的思路实现的一个通用解决方案: #### 方法描述 该方法通过遍历字符串中的每一个字符,并累加其对应的字节数来判断是否超出指定的最大字节数限制。当达到或接近限制时停止追加新的字符[^1]。 #### 示例代码 以下是一个完整的 Java 函数示例,用于按给定字节数安全地截取字符串: ```java public class ByteSubstringUtil { /** * 安全地按字节截取字符串 * * @param str 输入字符串 * @param maxBytes 最大允许的字节数 * @param charset 字符集编码(例如:"UTF-8" 或 "GBK") * @return 截取后的字符串 */ public static String safeSubstring(String str, int maxBytes, String charset) { if (str == null || str.isEmpty() || maxBytes <= 0) { return ""; } try { if (str.getBytes(charset).length <= maxBytes) { return str; } StringBuilder result = new StringBuilder(); int byteCount = 0; for (char c : str.toCharArray()) { // 获取当前字符的字节数 int charByteCount = String.valueOf(c).getBytes(charset).length; // 如果加上这个字符后总字节数超限,则停止 if (byteCount + charByteCount > maxBytes) { break; } // 更新累计字节数并追加字符 byteCount += charByteCount; result.append(c); } return result.toString(); } catch (Exception e) { throw new RuntimeException("Error occurred during substring operation.", e); } } public static void main(String[] args) { String input = "我ABC汉DEF"; int maxBytes = 6; String charset = "UTF-8"; String output = safeSubstring(input, maxBytes, charset); System.out.println("Original: " + input); System.out.println("Substr by bytes (" + maxBytes + "): " + output); } } ``` #### 关键点说明 1. **字符集支持** 使用 `String.getBytes(charset)` 来获取特定编码下的字节数数组,从而精确控制每种字符的实际占用空间[^3]。 2. **边界条件处理** 需要考虑输入为空、最大字节数小于等于零等情况,避免程序异常终止[^2]。 3. **性能优化** 虽然此算法的时间复杂度为 O(n),但对于大多数实际应用场景来说已经足够高效[^1]。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值