截取字符串的函数

编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串,但要保证汉字不被截取半个,如“我ABC”,4,应该截取“我AB”,输入“我ABC汉DEF”,6,应该输出“我ABC”,而不是“我ABC+汉的半个”。



package com.icss.test;

public class SplitString {

public static void main(String[] args) throws Exception{
String str = "我a爱中华abc我爱传智def";
// String str = "我ABC汉";
int num = trimGBK(str.getBytes("GBK"),7);
System.out.println(str.substring(0,num) );
}

public static int trimGBK(byte[] buf,int n){
int num = 0;
boolean bChineseFirstHalf = false;
for(int i=0;i<n;i++)
{
//这里注意了,如果是汉字的话,buf[i]就会返回的是负数
//应为上面已经申明了用GBK编码格式
if(buf[i]<0 && !bChineseFirstHalf){
bChineseFirstHalf = true;
}else{
num++;
bChineseFirstHalf = false;
}
}
return num;
}
}

### SQL 截取字符串函数及示例 在 SQL 中,用于截取字符串函数主要有 `SUBSTR`、`SUBSTRING` 和其他相关函数。这些函数可以根据同的需求灵活地截取字符串的一部分。 #### 1. 使用 `SUBSTR` 函数 `SUBSTR` 是一种常见的字符串截取函数,适用于多种数据库系统(如 MySQL、Oracle 等)。其基本语法如下: ```sql SUBSTR(expression, start, length) ``` - `expression`:需要被截取字符串。 - `start`:开始截取的位置,位置从 1 开始计数[^2]。 - `length`:需要截取的字符长度,如果省略,则从 `start` 开始截取字符串末尾[^2]。 **示例**: ```sql SELECT SUBSTR('字符串截取示例', 1, CHAR_LENGTH('字符串截取示例') - 3); ``` 上述语句将从字符串 `'字符串截取示例'` 的第 1 个字符开始截取,直到倒数第 3 个字符结束[^1]。 #### 2. 使用 `SUBSTRING` 函数 `SUBSTRING` 是 SQL Server 中常用的字符串截取函数,功能与 `SUBSTR` 类似。其基本语法为: ```sql SUBSTRING(expression, start, length) ``` - `expression`:需要被截取字符串。 - `start`:开始截取的位置,位置从 1 开始计数[^3]。 - `length`:需要截取的字符长度。 **示例**: ```sql DECLARE @str VARCHAR(50) = 'abcdeBeforefghjkAfter'; SELECT SUBSTRING(@str, 1, CHARINDEX('Before', @str) - 2); -- 截取 "Before" 前的字符串[^4] SELECT SUBSTRING(@str, CHARINDEX('Before', @str) + 6, LEN(@str) + 6 - CHARINDEX('Before', @str)); -- 截取 "Before" 后的字符串[^4] ``` #### 3. 结合 `CHARINDEX` 和 `LEN` 函数 `CHARINDEX` 用于查找子字符串的位置,而 `LEN` 用于获取字符串的长度。通过结合这两个函数,可以实现更复杂的字符串截取逻辑。 **示例**: ```sql DECLARE @str VARCHAR(50) = 'abcdeBeforefghjkAfter'; SELECT CASE WHEN @str LIKE '%Before%' THEN SUBSTRING(@str, 1, CHARINDEX('Before', @str) - 2) ELSE @str END AS BeforePart; -- 截取 "Before" 前的部分[^4] SELECT CASE WHEN @str LIKE '%Before%' THEN SUBSTRING(@str, CHARINDEX('Before', @str) + 6, LEN(@str) + 6 - CHARINDEX('Before', @str)) ELSE NULL END AS AfterPart; -- 截取 "Before" 后的部分 ``` #### 4. 其他注意事项 - 在某些数据库中,`SUBSTR` 和 `SUBSTRING` 可能是同义词或具有相似功能,但具体行为可能略有同,请根据所使用的数据库系统进行调整。 - 如果需要处理 Unicode 字符串,建议使用 `NCHAR` 或 `NVARCHAR` 数据类型,并确保函数支持 Unicode 编码[^3]。 ### 总结 SQL 提供了多种字符串截取函数,如 `SUBSTR` 和 `SUBSTRING`,能够满足同的字符串操作需求。通过合理组合这些函数,可以实现复杂的字符串处理逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值