【java学习】字符串
来源:互联网 发布:淘宝网店进货 编辑:程序博客网 时间:2024/05/22 06:32
1,字符串函数
(start,end) 从start到 index end - 1.
1)字符串转换为数组
①转换为字符数组
char[] ch = str.toCharArray();
②将分隔符分开的字符串转换为数组
data = "aa_bb_cc";String[] param = data.split("_");
param={“aa”,”bb”,”cc”}
2)字符数组转为字符串
String.valueOf(ch);
3)去掉空格
str.trim();
4)截取
str.substring(3);//"Hello world!"-->"lo world!"str.substring(3,7);//"Hello world!"-->"lo w"
5)索引
str1.IndexOf("字"); //查找“字”在str1中的索引值(位置)str1.IndexOf("字串");//查找“字串”的第一个字符在str1中的索引值(位置)str1.IndexOf("字",start,end);//从str1第start+1个字符起,查找end个字符,查找“字”在字符串STR1中的位置[从第一个字符算起]注意:start+end不能大于str1的长度
2,String、StringBuffer和StringBuilder区别
1)String
字符串常量。
是不可变对象。每次对String对象改变时,都等同生成了一个新的String对象,然后指针指向新的String对象,从而耗内存,影响系统性能。
在一下字符串对象生成中,String效率远比StringBuffer快:
String S1 = “This is only a” + “ simple” + “ test”; StringBuffer Sb = new StringBuilder(“This is only a”).append(“ simple”).append(“ test”);
但如果拼接的字符串来自另外的String对象,速度就会变慢,如:
String S2 = “This is only a”;String S3 = “ simple”;String S4 = “ test”;String S1 = S2 +S3 + S4;
2)StringBuffer
字符串变量(线程安全),类似String字符串缓冲区。
推荐使用。每次修改对象的值都是修改对象本身,不生成新的对象。减少GC,提高效率。
方法:
append方法:追加字符串。
insert方法:在指定点添加字符。z.insert(4, "le")//“start”-->“starlet”
3)StringBuilder
字符串变量(非线程安全).
比StringBuffer快,但不保证同步,多用在单线程(推荐)。
3,demo
1)字符串智能截取
package luo.StringCut;/** * 字符串截取函数 * 要求: * 1,输入一个字符串和字节数,输出为按字节截取的字符串。 * 2,保证汉字不被截半个,例如("人ABC",4)="人AB",("人ABC们EF",6)="人ABC" * @author luo * *分析: *java语言中,默认使用Unicode编码方式,即每个字符占两个字节, *因此可以用来存储中文。 *虽然String是由char组成,但存储时,每个英文占一个字符,中文2个字符。 */public class StringCut { /** * 判断字符c是否是中文字符,如果是返回true * @return */ private static boolean isChinese(char c){ String s = String.valueOf(c); return s.getBytes().length>1 ? true : false; } public static String StringCut(String str, int len){ if(null == str || 0 == len){ return ""; } if(str.length() < len){ System.out.println("非法信息:截取长度大于字符串长度!"); return ""; } char[] charArr = str.toCharArray(); StringBuilder sb = new StringBuilder(""); int count = 0;//用来记录当前截取字符的长度 for(char cc:charArr){ if(count < len){ if(isChinese(cc)){ //如果要截取子串的长度只差一个字符,但是接下来的字符是中文,则截取结果子串中不保存这个中文字符 if(count + 1 == len){ return sb.toString(); } count = count + 2; sb = sb.append(cc); }else{ count = count + 1; sb = sb.append(cc); } }else{ break; } } return sb.toString(); }}
package luo.StringCut;public class Main { public static void main(String[] args){ //("人ABC",4)="人AB",("人ABC们EF",6)="人ABC" System.out.println(StringCut.StringCut("人ABC",4)); System.out.println(StringCut.StringCut("人ABC们EF",6)); }}
2)字符串反转
package luo.StringReverse;/** * 不利用java类库,实现字符串反转 * @author luo * *分析:很多种方法可以实现。 *1,数组反转法: *将字符串转换为字符数组,然后对数组进行反转,然后再反转为字符串。 *2,逆序遍历法: *把字符串转换为字符数组,逆向遍历数组,然后拼接遍历到的字符即可。 *3,递归法:(高水平代码) *递归地把字符移动到字符串的最后一个位置。 */public class StringReverse { /** * 1,数组反转法: *将字符串转换为字符数组,然后对数组进行反转,然后再反转为字符串。 */ public static String reverse1(String str){ char[] ch = str.toCharArray(); char c;//交换中间值 int len = ch.length; for (int i = 0; i < len/2; i++) { c = ch[i]; ch[i] = ch[len - i - 1]; ch[len - i - 1] = c; } return String.valueOf(ch); } /** *2,逆序遍历法: *把字符串转换为字符数组,逆向遍历数组,然后拼接遍历到的字符即可。 */ public static String reverse2(String str){ StringBuilder sb = new StringBuilder(); char[] ch = str.toCharArray(); for (int i = ch.length-1; i >=0; i--) { sb.append(ch[i]); } return sb.toString(); } /** *3,递归法: *递归地把字符移动到字符串的最后一个位置。 */ public static String reverse3(String str){ if(str.length() < 1){ return str; } return reverse3(str.substring(1)) + str.charAt(0); }}
package luo.StringReverse;public class Main { public static void main(String[] args){ System.out.println(StringReverse.reverse1("reverse1")); System.out.println(StringReverse.reverse2("reverse2")); System.out.println(StringReverse.reverse3("reverse3")); }}
3)
0 0
- JAVA字符串学习笔记
- Java 字符串学习笔记
- Java字符串学习
- java学习之字符串
- java学习:输入字符串
- java 字符串学习【转】
- Java字符串学习笔记
- 学习日记java 字符串
- java字符串的学习
- Java学习笔记:字符串
- java学习--字符串1
- java学习-字符串2.
- JAVA 字符串学习笔记
- JAVA 字符串学习笔记
- 1--java字符串学习
- 【java学习】字符串
- java学习笔记--字符串
- Java字符串学习总结
- JSP(7)关于刷新持续发送请求的处理
- Java 实例
- VMware-tools安装
- matlab下 ROC和AUC的实现
- IOS协议·IOS分类·IOS扩展(总结)
- 【java学习】字符串
- axure8 实例2 简单的轮播图效果
- 《人民的名义》之陆毅的演技
- swift 3.0 数组赋值
- 杭电oj(Java版)—— 2602 Bone Collector—— 01背包问题
- 最大连续子序列 (dp)HDU 1231
- Box UVA
- 最大子段和 (含变形)【dp】
- DrawerLayout 点击穿透事件