1.public String nextLine();获取键盘录入字符串数据
nextLine()一般不能和其他的next方法一起是用,否则会有问题;nextLine放在上边,别的例如nextInt 放在下边是可以用的,
而nextInt放上边,nextLine放下边就会有问题。
next() 也可以接收字符串,不过他接收的时候如果中间有空格的话,只能接收到空格之前的字符串
如 java ios 只能接收到java
注意: 字符串具有复用性 字符串的内容始终存在常量池里面,例如 “hello”
2:String类的概述和使用
(1)多个字符组成的一串数据。
其实它可以和字符数组进行相互转换。
(2)构造方法:
A:public String()
B:public String(byte[] bytes)
C:public String(byte[] bytes,int offset,int length)
D:public String(char[] value)
E:public String(char[] value,int offset,int count)
F:public String(String original)
下面的这一个虽然不是构造方法,但是结果也是一个字符串对象
G:String s = "hello";
//方式1
//String(String original):把字符串数据封装成字符串对象
String s1 = new String("hello");
System.out.println("s1:"+s1);
System.out.println("---------");
//方式2
//String(char[] value):把字符数组的数据封装成字符串对象
char[] chs = {'h','e','l','l','o'};
String s2 = new String(chs);
System.out.println("s2:"+s2);
System.out.println("---------");
//方式3
//String(char[] value, int index, int count):把字符数组中的一部分数据封装成字符串对象
//String s3 = new String(chs,0,chs.length);
String s3 = new String(chs,1,3);
System.out.println("s3:"+s3);
System.out.println("---------");
//方式4
String s4 = "hello";
System.out.println("s4:"+s4);
(3)字符串的特点
A:字符串一旦被赋值,就不能改变。
注意:这里指的是字符串的内容不能改变,而不是引用不能改变。
B:字面值作为字符串对象和通过构造方法创建对象的不同
String s = new String("hello");和String s = "hello"的区别?
通过构造方法创建的字符串对象和直接赋值方式创建的字符串对象有什么区别呢?
通过构造方法创建字符串对象是在堆内存。
直接赋值方式创建对象是在方法区的常量池。
==:
基本数据类型:比较的是基本数据类型的值是否相同
引用数据类型:比较的是引用数据类型的地址值是否相同
(4)字符串的面试题(看程序写结果)
A:==和equals()
String s1 = new String("hello");
String s2 = new String("hello");
System.out.println(s1 == s2);// false
System.out.println(s1.equals(s2));// true
String s3 = new String("hello");
String s4 = "hello";
System.out.println(s3 == s4);// false
System.out.println(s3.equals(s4));// true
String s5 = "hello";
String s6 = "hello";
System.out.println(s5 == s6);// true
System.out.println(s5.equals(s6));// true
B:字符串的拼接
String s1 = "hello";
String s2 = "world";
String s3 = "helloworld";
System.out.println(s3 == s1 + s2);// false
System.out.println(s3.equals((s1 + s2)));// true
System.out.println(s3 == "hello" + "world");// false 这个我们错了,应该是true
System.out.println(s3.equals("hello" + "world"));// true
(5)字符串的功能(自己补齐方法中文意思)
A:判断功能
boolean equals(Object obj) 比较字符串的内容是否相同 这里虽然可以接收object类型的
但是如果是两个不同类型作比较那么会直接输出false
例如,狗类和猫类做比较。
boolean equalsIgnoreCase(String str) 比较字符串的内容是否相同,忽略大小写
boolean contains(String str)
boolean startsWith(String str) 判断字符串对象是否以指定的str开头
boolean endsWith(String str) 判断字符串对象是否以指定的str结尾
boolean isEmpty()
B:获取功能
int length() 获取字符串的长度,其实也就是字符个数
char charAt(int index) 获取指定索引处的字符
int indexOf(int ch)
int indexOf(String str) 获取str在字符串对象中第一次出现的索引
int indexOf(int ch,int fromIndex)
int indexOf(String str,int fromIndex)
String substring(int start) 从start开始截取字符串
String substring(int start,int end) 从start开始,到end结束截取字符串。包括start,不包括end
C:转换功能
byte[] getBytes()
char[] toCharArray() 把字符串转换为字符数组
static String valueOf(char[] chs)
static String valueOf(int i)
String toLowerCase() 把字符串转换为小写字符串
String toUpperCase() 把字符串转换为大写字符串
String concat(String str)
D:其他功能
a:替换功能
String replace(char old,char new)
String replace(String old,String new)
b:去空格功能
String trim()
c:按字典比较功能
int compareTo(String str)
int compareToIgnoreCase(String str)
d:按照指定符号分割字符串
String[] split(String str)
String str = "127.0.0.1";
String[] strArr = str.split("."); D
System.out.println(strArr[1]);结果是什么( )
A.0 // 不能拿点来切 ,如果切了数组的长度为0
B.127
C.编译报错
D.运行出错
(6)字符串的案例
A:模拟用户登录
B:字符串遍历
1:length()加上charAt()
2:把字符串转换为字符数组,然后遍历数组
C:统计字符串中大写,小写及数字字符的个数
D:把字符串的首字母转成大写,其他小写
E:把int数组拼接成一个指定格式的字符串
F:字符串反转
G:统计大串中小串出现的次数
StringBuilder:是一个可变的字符串。字符串缓冲区类。
String和StringBuilder的区别:
String的内容是固定的。
StringBuilder的内容是可变的。
构造方法:
StringBuilder()
成员方法:
public int capacity():返回当前容量
public int length():返回长度(字符数)
容量:理论值
长度:实际值
添加功能
public StringBuilder append(任意类型):添加数据,并返回自身对象
反转功能
public StringBuilder reverse()
StringBuilder和String的相互转换
StringBuilder -- String
public String toString():通过toString()就可以实现把StringBuilder转成String
String -- StringBuilder
StringBuilder(String str):通过构造方法就可以实现把String转成StringBuilder |
|