java 怎么截取某字符java截取逗号后字符串串

&nbsp&#8250&nbsp&nbsp&#8250&nbsp
Java按字节数截取字符串,一个中文长度为2
碰到可能会截取汉字的情况,当然是要不能截取出乱码来,就是不能对整个汉字截取一半。如&我ABC汉字d&这个字符串,截取5个字节的时候,应该是&我
ABC&,而截取8个字节的时候,应该是&我ABC汉&,而不应该是&我ABC汉?&,其中&?&为半个汉字,可理解为向前截取public static String subStr(String str, int subSLength)&
&&&&&&&&&&&&&&&throws UnsupportedEncodingException{
&&&&&&&&&&&if (str == null)&
&&&&&&&&&&&&&&&return "";&
&&&&&&&&&&&else{
&&&&&&&&&&&&&&&int tempSubLength = subSL//截取字节数
&&&&&&&&&&&&&&&String subStr = str.substring(0, str.length()&subSLength ? str.length() : subSLength);//截取的子串&
&&&&&&&&&&&&&&&int subStrByetsL = subStr.getBytes("GBK").//截取子串的字节长度
&&&&&&&&&&&&&&&//int subStrByetsL = subStr.getBytes().//截取子串的字节长度
&&&&&&&&&&&&&&&// 说明截取的字符串中包含有汉字&
&&&&&&&&&&&&&&&while (subStrByetsL & tempSubLength){&
&&&&&&&&&&&&&&&&&&&int subSLengthTemp = --subSL
&&&&&&&&&&&&&&&&&&&subStr = str.substring(0, subSLengthTemp&str.length() ? str.length() : subSLengthTemp);&
&&&&&&&&&&&&&&&&&&&subStrByetsL = subStr.getBytes("GBK").
&&&&&&&&&&&&&&&&&&&//subStrByetsL = subStr.getBytes().
&&&&&&&&&&&&&&&}&
&&&&&&&&&&&&&&&return subS
&&&&&&&&&&&}
&&&&&&&}备注:将字符编码GBK改为UTF-8,则每个中文长度按3个字符计算
以下方法是向后截取字符串public static String subStr_1(String str, int start, int end)
&&&&&&&&&&&&&&&throws UnsupportedEncodingException{
&&&&&&&&if (str == null)&
&&&&&&&&String chinese = "[\u0391-\uFFE5]";
&&&&&&&&byte[] b = str.getBytes("UTF-8");
&&&&&&&&String temp = new String(b, start, end);
&&&&&&&&String last = getLastStr(temp);
&&&&&&&&while(!last.matches(chinese)){
&&&&&&&&&&&&temp = new String(b, start, ++end);
&&&&&&&&&&&&last = getLastStr(temp);
&&&&&&&&return new String(b, start, end);
public static String getByteStr(String str, int start, int end) throws UnsupportedEncodingException{
&&&&&&&&byte[] b = str.getBytes("UTF-8");
&&&&&&&&return new String(b, start, end);
上一篇: 在Android应用开发中,经常会使用到状态栏通知(Status Notification),例如新浪微博、网易新闻等提供的推送消息,软件后台更新时进度的显示等等,如下图所示: 看了网上很多关于Notification的博客文章,发现几乎没有一个能将自定义状态栏通知完全实现正确
下一篇: 使用上下文操作模式 上下文操作模式是ActionMode类的一个系统实现,它关注用户跟执行上下文操作的交互。当用户通过选择一个项目使这种模式成为可能的时候,一个上下文操作栏就会显示在屏幕的顶部,并展现出用户在当前被选择的项目上能够执行的操作。当这种模java怎么截取两个字符串之间的字符串?超简单
java的String类提供了几个截取字符串的方法,subSrring(),但传入的参数都是int型的字符位置。如果要截取两个字符串之间的字符串怎么办呢? 比如 String str="&k&AAAAA&/k&&k&BBBB&/k&&k&CCC\nCC&/k&&k&DDDD&/k&&k&EEEEEEEEEEEEEEE&/k&";
我们截取&k&和&/k&之间的字符串。
第一个方法比较简单,但是有个缺点,先看代码: String str="&k&AAAAA&/k&&k&BBBB&/k&&k&CCCCC&/k&&k&DDDD&/k&&k&EEEEEEEEEEEEEEE&/k&"; Pattern pile("&k&(.*?)&/k&"); //这里用到了正则表达式,需要一点点正则表达式的基础 Matcher m=p.matcher(str); while(m.find()){
System.out.println(m.group(1)); } 执行结果如下:
这个没问题。但是呢,如果在字符串之间加个\n的话,问题就出来了。比如: String str="&k&AAAAA&/k&&k&BBBB&/k&&k&CCC\nCC&/k&&k&DDDD&/k&&k&EEEEEEEEEEEEEEE&/k&"; 结果就变成了:
看到了吧,CCC\nCC不见了。所以缺点就是不能截取换行符。
下面我们自己来写一个算法,用最基础的if+for来实现,不调用系统的其他类。 public static String subString(String str,String str1,String str2){ -
- str+=" "; //防止后面数组越界 - char[] ch=str.toCharArray(); - String temp=""; - boolean flag=false; - char[] ch1=str1.toCharArray(); - char[] ch2=str2.toCharArray(); - for(int k=0;k&str.length();k++){ - int m,n; - //开始匹配 - for(m=0;m&str1.length();m++){ - if(ch[k+m]!=ch1[m]) - break; - } - if(m==str1.length()){ - k=k+m; - flag=true; - //只有全部匹配才能开始 - } - - if(flag==true){ - //如果前面字符串匹配成功就开始赋值 - temp+=ch[k]; - for(m=0;m&str2.length();m++){ - //匹配结束字符串 - if(ch[k+m+1]!=ch2[m]) - break; - } - if(m==str2.length()){ - flag=false; - break; - } - } - } - return } 我们在main()方法里调用,顺便将其赋值给一个数组: String str="&0&AAAAA&/0&&1&BBBB&/1&&2&CCC\nCC&/2&&3&DDDD&/3&&4&EEEEEEEEEEEEEEE&/4&"; String[] newStr1=new String[10]; for(int i=0;i&10;i++){
String str1="&"+i+"&";
String str2="&/"+i+"&";
newStr1[i]=subString(str,str1,str2);
System.out.println(newStr1[i]); }
CCC\nCC的换行符也一起截取了。 方法很多,大家自己摸索。写代码一定要多写,永远不要嫌熟练。
前面的代码如果不好看的话这里有截图:获取字符串中某一个字段的数据,GetValueFromStr
gps数据格式为:$GPRMC,,A,,N,,E,10.05,324.27,150706,,,A*
vcD4KPHByZSBjbGFzcz0="brush:">/**********************************************************************
*版权所有 (C)2015, Wuyq。
*文件名称: GetValueFromStr.c
*内容摘要:用于演示从gps数据字符串中获取相应的内容
*其它说明:无
*当前版本: V1.0
*完成日期:
********************************************************************
**********************************************************************/
_CRT_SECURE_NO_WARNINGS
//字段最大长度
#define MAX_RET_BUF_LEN
//数据类型
typedef unsigned char
typedef unsigned short int
typedef unsigned int
typedef signed
typedef unsigned char
/**********************************************************************
*功能描述:获取字符串中某一个字段的数据
*输入参数: iSerialNum-字段编号(为正整数)
pSourceStr-源字符串
pDstStr-目的字符串(提取的数据的存放位置)
cIsolater-源字符串中字段的分隔符
iDstStrSize-目的字符串的长度
*输出参数:无
*返回值: TRUE-成功
FALSE-失败
*其它说明:无
* --------------------------------------------------------------
***********************************************************************/
BOOL GetValueFromStr(UINT16 iSerialNum, UINT8 *pSourceStr, UINT8 *pDstStr, UINT8 cIsolater, UINT32 iDstStrSize)
*pStrBegin = NULL;
*pStrEnd = NULL;
szRetBuf[MAX_RET_BUF_LEN] = { 0 }; //截取出的字符串放入该数组中
*pUINT8 = NULL;
UINT16 *pUINT16 = NULL;
UINT32 *pUINT32 = NULL;
iFieldLen = 0;
//用于表示每个字段的实际长度
if (pSourceStr == NULL)
//对输入指针的异常情况进行判断
return FALSE;
pStrBegin = pSourceS
while (--iSerialNum != 0)
printf("wo zhixing le\n");
pStrBegin = strchr(pStrBegin, cIsolater);
if (pStrBegin == NULL)
return FALSE;
pStrBegin++;
pStrEnd = strchr(pStrBegin, cIsolater);
if (pStrEnd == NULL)
return FALSE;
iFieldLen = (UINT16)(pStrEnd - pStrBegin);
if (iFieldLen >= MAX_RET_BUF_LEN) //进行异常保护, 防止每个字段的值过长
iFieldLen = MAX_RET_BUF_LEN - 1;
memcpy(szRetBuf, pStrBegin, iFieldLen);
strncpy(pDstStr, szRetBuf, iDstStrSize);
return TRUE;
/****************************************************************
*功能描述:
*输入参数:
*输出参数:
*其他说明:
* -------------------------------------------------------------------------------
****************************************************************/
void main()
*hFile = NULL;
//文件句柄指针
UINT8 szContentLine[1024] = { 0 };
//用于存放从文件中独到的每条记录
UINT8 szDes[100] = { 0 };//接收分离出的数据
//打开文件
hFile = fopen("gpsdata.txt", "r");
if (!hFile)
//打开失败
printf("Open gpsdata.txt failed!\n");
return -1;
//异常退出
while (NULL != fgets(szContentLine, sizeof(szContentLine), hFile))//不断地读取文件
printf("szContentLine=[%s]\n", szContentLine);//打印没次读到一行的数据内容
if (TRUE != GetValueFromStr(1, szContentLine, szDes, ',', sizeof(szDes)))
printf("获取信息1失败.\n");
return -1;
printf("szDes=[%s]\n", szDes);
if (TRUE != GetValueFromStr(2, szContentLine, szDes, ',', sizeof(szDes)))
printf("获取信息2失败.\n");
return -1;
printf("szDes=[%s]\n", szDes);
fclose(hFile);
system("pause");

我要回帖

更多关于 java截取最后字符串 的文章

 

随机推荐