黑马程序员_Java基础_字符串操作
2014-01-28 12:02
549 查看
----------------------
ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
一、String类的简单理解
在Java中,字符串是最常用的类之一,对于String类的声明方式有两种,一种是直接的String str = "abc";另外一种是:通过new 关键字来声明 即 String str = new String("abc");
那么者两种方式有什么区别呢?如果想要解释这个问题,就必须理解一个重要的概念:一个字符串就是String类的匿名对象,匿名对象就是已经开辟了对内存空间的并且可以直接使用的对象。对于第二种方式,如果使用new 关键字,不管如何都会在开辟一个新的空间,但是此时空间的内容还是“abc”,实际上此时在对内存中存在两个空间,而 str此时指向的就是new关键字开辟出来的空间,原来“abc”所占的空间就会变为垃圾空间。所以,一般情况下不要使用 String
str = new String("");的方式。【好吧,其实就一句话,new关键字声明String时会造成空间的浪费】
对于String的常用API,感觉看着文档在这里记录学习笔记没什么意思,在学习中根据实际场景,慢慢都会知道了。好吧,说这么多感觉好空洞。
二、String类的简单练习
下面做几个String的练习
1.对给定字符串的指定位置进行反转操作 例如:"abcdefg" 变为 "abcfedg"
2.获取一个字符串在另外一个字符串中出现的次数
3.获取两个字符串最大相同的子串
不废话,直接上代码,并且解释
在开发中,尽量少使用 String str = "aa"+"bb"+"cc";这种形式就会在内存中开辟了三个空间,特别在for循环中,尽量不要这样使用。在JavaAPI中提供了一个StringBuffer,StringBuilder类,这两个类可以很容易进行字符串的相加操作:例如 StringBuilder mBuider = new StringBuilder("aaa"); mBuilder.append("").append("");这个类方法比较简单,可以参照Java文档进行练习。上述两个类操作方式完全一样,区别在于
StringBuffer是线程安全的,在操作时用到了线程中的锁机制,效率比较低。
关于Java中的基本数据类型的包装类
boolean Boolean;
int Integer;
byte Byte;
short Short;
long Long ;
double Double;
float Float;
char Character;
在jdk1.5之后,这几种数据类型可以实现自动装箱与拆箱的操作。例如:Integer i = 4;相当于 Integer i = new Integer(4); 装箱 int j = i;自动拆箱,相当于 int j = Integer.valueOf(i);
基本API方法需要在学习工作中不断使用,就会慢慢的记住。【上述总结可能存在问题,希望大家批评指正。】
----------------------
ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
详细请查看:http://edu.csdn.net
ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
一、String类的简单理解
在Java中,字符串是最常用的类之一,对于String类的声明方式有两种,一种是直接的String str = "abc";另外一种是:通过new 关键字来声明 即 String str = new String("abc");
那么者两种方式有什么区别呢?如果想要解释这个问题,就必须理解一个重要的概念:一个字符串就是String类的匿名对象,匿名对象就是已经开辟了对内存空间的并且可以直接使用的对象。对于第二种方式,如果使用new 关键字,不管如何都会在开辟一个新的空间,但是此时空间的内容还是“abc”,实际上此时在对内存中存在两个空间,而 str此时指向的就是new关键字开辟出来的空间,原来“abc”所占的空间就会变为垃圾空间。所以,一般情况下不要使用 String
str = new String("");的方式。【好吧,其实就一句话,new关键字声明String时会造成空间的浪费】
对于String的常用API,感觉看着文档在这里记录学习笔记没什么意思,在学习中根据实际场景,慢慢都会知道了。好吧,说这么多感觉好空洞。
二、String类的简单练习
下面做几个String的练习
1.对给定字符串的指定位置进行反转操作 例如:"abcdefg" 变为 "abcfedg"
2.获取一个字符串在另外一个字符串中出现的次数
3.获取两个字符串最大相同的子串
不废话,直接上代码,并且解释
package com.itheima.string; import java.util.regex.Pattern; /** * 字符串练习 1.实现字符串指定位置的反转 * 2.获取一个字符串在指定字符串中出现的次数 * 3.获取两个字符串中最大相同子串 */ public class StringDemo { public static void main(String[] args) { String str = "a..12345b"; //System.out.println(reverse(str, 1, 6)); //String str1 = "."; //System.out.println(getShowNum(str1, str)); System.out.println(getMaxSubstring(str, "a.1234b5")); } /** * 获取两个字符串最大相同子串 * @param s1 * @param s2 * @return 返回最大相同子串 */ public static String getMaxSubstring(String s1,String s2){ //得到最长的字符串与最短的字符串 String minStr = s1.length()>s2.length()? s2:s1; String maxStr = s2.equals(minStr)? s1:s2; //对最短的字符串进行循环 for(int i = 0 ; i < minStr.length();i++){ //例如 abcd 第一次就拿abcd进行比较,第二次abc,bcd 第三次 ab,bc,cd 每次开始位置都是0,然后结束位置就是(长度-次数) //当结束位置与字符串长度相同是结束本次循环 for(int beginIndex = 0,endIndex = minStr.length()-i;endIndex <= minStr.length();beginIndex++,endIndex++){ String temp = minStr.substring(beginIndex, endIndex); if(maxStr.contains(temp)){ return temp; }; } } return ""; } /** * 获取一个字符串在指定字符串中出现的次数 * src 在 dest 中出现的次数 * @param src * @param dest 指定字符串 * @return 出现的次数 */ public static int getShowNum(String src,String dest){ if(src == null || src.isEmpty()){ throw new IllegalArgumentException("src cannot empty"); } int index = 0; while(dest.contains(src)){ index++; //把指定字符串中包含src的部分依次去掉 dest = Pattern.compile(src, Pattern.LITERAL).matcher(dest).replaceFirst(""); } return index; } /** * 对给定的字符串,在开始位置与结束位置之间进行字符串的反转 * * @param src * 给定字符串 * @param beginIndex * 开始位置索引 * @param endIndex * 结束位置索引 (注意,结束位置不包含在反转中) [beginIndex,endIndex); * @return 返回操作后的字符串 */ public static String reverse(String src, int beginIndex, int endIndex) { if (beginIndex < 0 || beginIndex > endIndex || endIndex > src.length() || beginIndex > src.length()) { throw new IllegalArgumentException("illegal index,please check beginIndex,endIndex."); } if(src == null || src.isEmpty()){ return ""; } //截取指定范围的字符串 String temp = src.substring(beginIndex, endIndex); char[] tempchs = temp.toCharArray(); char[] chs = src.toCharArray(); //例如 截取的字符串范围为[1-6),那么字符串的长度就为5,下标就从0--4 for(int i = beginIndex; i <= endIndex-beginIndex ;i++){ chs[i] = tempchs[endIndex-i-1]; } return new String(chs); } }
在开发中,尽量少使用 String str = "aa"+"bb"+"cc";这种形式就会在内存中开辟了三个空间,特别在for循环中,尽量不要这样使用。在JavaAPI中提供了一个StringBuffer,StringBuilder类,这两个类可以很容易进行字符串的相加操作:例如 StringBuilder mBuider = new StringBuilder("aaa"); mBuilder.append("").append("");这个类方法比较简单,可以参照Java文档进行练习。上述两个类操作方式完全一样,区别在于
StringBuffer是线程安全的,在操作时用到了线程中的锁机制,效率比较低。
关于Java中的基本数据类型的包装类
boolean Boolean;
int Integer;
byte Byte;
short Short;
long Long ;
double Double;
float Float;
char Character;
在jdk1.5之后,这几种数据类型可以实现自动装箱与拆箱的操作。例如:Integer i = 4;相当于 Integer i = new Integer(4); 装箱 int j = i;自动拆箱,相当于 int j = Integer.valueOf(i);
基本API方法需要在学习工作中不断使用,就会慢慢的记住。【上述总结可能存在问题,希望大家批评指正。】
----------------------
ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
详细请查看:http://edu.csdn.net
相关文章推荐
- 黑马程序员——java基础——Java中对字符串的操作
- 黑马程序员--Java基础--字符串常用操作(一)
- 黑马程序员——Java基础——Set体系、Map体系操作等
- 黑马程序员——Java基础---IO(二)---IO字节流、流操作规律
- 黑马程序员java基础之字符串
- 黑马程序员——Java基础——集合类、Collection、List体系、集合框架LinkedList操作等
- 黑马程序员_Java基础_IO流(File类和properties类相关操作)
- 黑马程序员——Java基础---IO(一)---IO流概述、字符流、字节流、流操作规律
- 黑马程序员_Java基础_IO流(File类和properties类相关操作)
- 黑马程序员—12—java基础:有关字符串的学习笔记和学习心得体会
- 黑马程序员—8、JAVA基础&字符串
- Java基础---IO(一)---IO流概述、字符流、字节流、流操作规律 (黑马程序员)
- 黑马程序员——JAVA基础---操作数组
- 黑马程序员——JAVA基础---操作数据库
- 黑马程序员——Java基础——String类、StringBuffer类、StringBuilder类、基本数据类型对象包装类操作、正则表达式应用
- 黑马程序员--Java基础加强--15.利用反射操作泛型IV【通过反射Method解析泛型方法思路】【通过Method对四种Type子接口类型进行解剖】【使用递归对任意复合泛型类型进行彻底解剖】【个人
- 黑马程序员—java基础学习--JavaBean的内省操作
- java基础――字符串操作
- 黑马程序员_Java基础_字符串_13
- 黑马程序员——Java基础---IO(一)---IO流概述、字符流、字节流、流操作规律