黑马程序员---java基础---3String类
2014-01-03 13:46
531 查看
---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流!
----------------------
1、从概念上讲,java字符串就是Unicode字符序列。每个用双引号括起来的字符串都是String类的一个实例。Java字符串由char序列组成,字符数据类型是一个采用UTF-16的编码表示Unicode代码点的代码单元。(大多数的常用Unicode字符使用一个代码单元就可以表示,而付诸字符需要一对代码单元表示。具体内容,请自行查阅相关资料或者百度,本人不在此赘述了。)
2、格式:
1 String a = ”abc”;//存储在StringPool中
2 String b = new String(”abc”)://存储在堆内存中
复制代码
3、StringPool(字符串池):有一个存放字符串的公共存储池,称为StringPool,即字符串池。字符变量指向存储池中的相应位置。如果是通过复制一个字符串变量,原始的字符串和复制的字符串将共享这个相同的字符串。
二、特点:
1、String是一种特殊的数据类型,可创建对象。
2、通过String创建的对象分别可存在于字符串池(StringPool)和堆内存中
3、String是一个final的类型,即不可被继承修改,一经生成不可改变。
4、StringPool中的数据可共享,即两个引用变量可指向同一个字符串池中的字符串
5、Java中的任何对象都可写成字符串的形式。
字符串不可变的原因:
a. 可以想得出,每种固定的东西是不会改变的,1就是1,也就是说你若想改变,只得改变这个引用变量所指向的地址。
b. 编译器可以让字符串共享数据。所以不必改变字符串,直接改变变量即可。
c. java的开发者认为共享数据的效率要远远胜于提取、拼接字符串的效率。程序中对字符串的修改操作很少,更多的是对字符串进行比较
(例外:将源自于文件或键盘的单个字符或较短的字符串汇集成字符串。具体在下面会说到。)
字符串
(1)有多个字符组成的一串数据。
(2)字符串的构造方法:
A:String()
初始化一个新创建的 String 对象,使其表示一个空字符序列
s1="abc"
B:String(byte[] bys)
通过使用平台的默认字符集解码指定的 byte 数组,构造一个新的 String。
byte[]bys={97,98,98}
String s2=new string(bys)
C:String(byte[] bys,int start,int count)
定义一个byte数组从指定位置开始,到指定位置结束
byte[]bys={97,98,98}
String s3=new String(bys,1,2)
D:String(char[] chs)
定义一个字符数组
char[]chs={'a','b','c','d','e','爱','你'}
String s4=new String (chs)
E:String(char[] chs,int start,int count)
定义一个
4000
char数组从指定位置开始,到指定位置结束
char[]chs={'a','b','c','d','e','爱','你'}
String s5=new String (chs,2,5)
F:String(String s)
初始化一个新创建的 String 对象,
String s6=new String("abcde")
G:String s = "hello";
常见的面试题
A:String s = new String("abc")和String s = "abc"的区别?
有,区别是第一种方案,s1是一个对象,abc也是一个对象。
前者有两个对象,后者只有一个对象。
(5)字符串的功能方法:
A:判断功能
boolean equals(Object obj)
比较两个字符串内容是否一样。
boolean equalsIgnoreCase(String str)
忽略大小写,判断两个字符串内容是否相同
boolean contains(String str)
判断一个字符串是否包含另一个
boolean startsWith(String str)
判断字符串是否以指定字符串开头
boolean endsWith(String str)
判断字符串是否以指定字符串结束。
boolean isEmpty()
当且仅当 length() 为 0 时返回 true
public boolean matches(String regex)
告知此字符串是否匹配给定的正则表达式。
B:获取功能
int length()
获取字符长度
char charAt(int index)
获取指定字符索引
int indexOf(int ch)
返回字符在此字符串中第一次出现的位置
int indexOf(String str);
返回此子符串在此字符串中第一次出现的位置。
int indexOf(int ch,int fromIndex)
返回此字符在字符串中从指定位置开始,
第一次出现的位置
int indexOf(String str,int fromIndex)
返回子字符串在此字符串中从指定位置开始,
第一次出现的位置。
String substring(int start)
获取从指定位置到末尾的子串
String substring(int start,int end)
获取从指定位置开始到指定位置结束
C:转换功能
byte[] getBytes()
通过字符串得到字节数组
char[] toCharArray()
通过字符串得到字节数组
static String copyValueOf(char[] chs)
通过字符数组得到字符串
static String valueOf(char[] chs)
通过字符数组得到字符串
static String valueOf(int i)基本类型
通过基本类型得到字符串
String toLowerCase()
把字符串转成小写
String toUpperCase()
把字符串转成大写
String concat(String str)
将参数与原字符串进行连接
D:其他功能
a:替换功能
String replac(char old,char new)
String replac(Stringold, String new)
b:切割功能
String[]split(String regex)
c:去除两端的空格
String trim()
d:按字典顺序比较
int compare To(String str)不忽略大小写
int compare ToIgoecase(String str)忽略大小写
案例: A:模拟用户登录 * 模拟用户登录。你怎么想的你就怎么做。 * * 分析: * A:先给定用户和密码。 * B:键盘录入用户名和密码。 * C:判断即可。 * 要么成功 * 要么失败 * D:用循环实现给几次机会。 */ public class StringTest3 { public static void main(String[] args) { for (int x = 0; x < 3; x++) { // x 0,1,2 // 键盘录入用户名和密码 Scanner sc = new Scanner(System.in); System.out.println("请输入用户名:"); String username = sc.nextLine(); System.out.println("请输入密码:"); String password = sc.nextLine(); // 判断即可。 if (username.equals("admin") && password.equals("admin")) { System.out.println("用户登录成功,可以开始玩游戏了"); palyGame(); break; } else { // 2,1,0 if ((2 - x) == 0) { System.out.println("账号被锁定,请联系班长"); } else { System.out.println("用户登录失败,你还有" + (2 - x) + "次机会"); } } } } public static void palyGame() { //系统产生一个随机数(1-100之间)。 int number = (int)(Math.random()*100)+1; while(true) { //键盘录入一个数据。 Scanner sc = new Scanner(System.in); System.out.println("你输入你猜的数据(1-100之间):"); int guessNumber = sc.nextInt(); //把录入的数据和随机数进行比较: if(guessNumber>number) { System.out.println("你猜的数据"+guessNumber+"大了"); } else if(guessNumber<number) { System.out.println("你猜的数据"+guessNumber+"小了"); } else { System.out.println("恭喜你,猜中了"); break; } } } } B:遍历字符串 * * 自己想办法遍历字符串,我要获取每一个字符。 * 举例:hello * 结果:h * e * l * l * o */ public class StringTest { public static void main(String[] args) { String s = "hello"; // System.out.println(s.charAt(0)); // System.out.println(s.charAt(1)); for(int x=0; x<s.length(); x++){ char ch = s.charAt(x); System.out.println(ch); } } } C:统计字符串中不同类型字符出现的次数 /* * 统计一个字符串中,不同类型的字符的个数:不包含其他的字符。 * 大写字符: * 小写字符: * 数字字符: * * 举例: * hello12345WORLDhaha678 * 大写字符:5 * 小写字符:9 * 数字字符:8 * * 分析: * A:键盘录入一个字符串。 * B:定义三个统计变量 * C:遍历字符串,获取到每一个字符 * D:判断该字符属于那种类型,然后该类型统计变量++即可。 */ public class StringTest2 { public static void main(String[] args) { //键盘录入一个字符串。 Scanner sc = new Scanner(System.in); System.out.println("请输入一个字符串:"); String line = sc.nextLine(); //定义三个统计变量 int bigCount = 0; int smallCount = 0; int numberCount = 0; //遍历字符串,获取到每一个字符 for(int x=0; x<line.length(); x++){ char ch = line.charAt(x); if(ch>='a' && ch<='z'){ smallCount++; } else if(ch>='A' && ch<='Z'){ bigCount++; } else if(ch>='0' && ch<='9'){ numberCount++; } } //输出结果 System.out.println("大写:"+bigCount); System.out.println("小写:"+smallCount); System.out.println("数字:"+numberCount); } } D:把字符串的前三个大写,其他小写 * 键盘录入一个字符串(只包含英文字母),把前三个字母转成大写,把其他的都转换小写。 * * 举例: * hEllWoRLd * * 结果: * HELlworld * * 分析: * A:键盘录入一个字符串 * B:截取字符串的前三个字符 * C:截取字符串的其他部分 * D:把B部分转成大写+C部分转成小写 */ public class StringTest { public static void main(String[] args) { // 键盘录入一个字符串 Scanner sc = new Scanner(System.in); System.out.println("请输入一个字符串:"); String line = sc.nextLine(); // 截取字符串的前三个字符 /* * String s1 = line.substring(0, 3); //截取字符串的其他部分 String s2 = * line.substring(3); //把s1转成大写+s2转成小写 String s3 = * s1.toUpperCase().concat(s2.toLowerCase()); System.out.println(s3); */ // String s = line.substring(0, 3).toUpperCase() // .concat(line.substring(3).toLowerCase()); // System.out.println(s); } } E:把字符串中字符排序 /* * 对字符串中的字符进行排序: * "baskcd" -- "abcdks" * * 分析: * A:把字符串变成字符数组 * B:自己写功能实现对数组的排序 * C:在把数组变成字符串 */ public class StringTest { public static void main(String[] args) { String s = "baskcd"; // 把字符串变成字符数组 char[] chs = s.toCharArray(); //自己写功能实现对数组的排序 sort(chs); //在把数组变成字符串 String result = String.valueOf(chs); System.out.println(result); } public static void sort(char[] chs){ for(int x=0; x<chs.length-1; x++) { for(int y=0; y<chs.length-1-x; y++) { if(chs[y]>chs[y+1]){ char temp = chs[y]; chs[y] = chs[y+1]; chs[y+1] = temp; } } } } } F:统计大串中小串的个数 /* * 获取一个字符串中指定子串出的次数。 * 比如说“hanbasdnbafllgnbahjnbakqqqqlnbaxi” * 在这个字符串中,多有个nba? */ public class StringTest2 { public static void main(String[] args) { String maxString = "hanbasdnbafllgnbahjnbakqqqqlnbaxi"; String minString = "nba"; // int count = getCount(maxString,minString); // System.out.println(count); int count = getCount2(maxString,minString); System.out.println(count); } public static int getCount(String maxString, String minString) { //定义统计变量 int count = 0; //首先查一次 int index = maxString.indexOf(minString); //判断是否存在 while(index!=-1){ count++; //截取 maxString = maxString.substring(index+minString.length()); //在变化后的大串中查找 index = maxString.indexOf(minString); } return count; } public static int getCount2(String maxString, String minString) { //定义统计变量 int count = 0; //首先查一次 int index = 0; //判断是否存在 //查找,赋值,判断三句写成了一句 while((index = maxString.indexOf(minString))!=-1){ count++; //截取 maxString = maxString.substring(index+minString.length()); } return count; } }
---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流!
----------------------
相关文章推荐
- 黑马程序员_Java基础Day13_String类(Done)
- 黑马程序员——Java基础---面向对象(Eclipse、Object类、String类)
- 黑马程序员---java基础知识之String类
- 黑马程序员--Java基础学习笔记【Object类、String类】
- 黑马程序员——Java基础---String类和基本数据类型包装类
- 黑马程序员——Java基础---String类和StringBuffer
- 黑马程序员---Java基础--13天(String类)
- 黑马程序员—Java基础—String类和Integer、Character类
- 黑马程序员——Java基础String类和基本数据类型包装类
- 黑马程序员——Java基础——String类的学习
- 黑马程序员_Java基础_String类
- 黑马程序员——Java基础——String类、StringBuffer和StringBuilder
- 黑马程序员——java基础-String类和基本数据类型包装类
- 黑马程序员——Java基础---String类、基本数据类型包装类
- 黑马程序员---java基础知识(六):string类
- 黑马程序员—JAVA基础—String类 javaAPI学习
- 黑马程序员--java基础复习之String类StringBuffer及基本数据类型包装类
- 黑马程序员——java基础知识之String类和基础数据类型对象包装类
- 黑马程序员——Java基础---String类和基本数据类型包装类
- 黑马程序员-- Java基础---> String类与包装类