API(应用程序接口)
Java写好的技术(功能代码),可以直接调用
String概述
java.lang.String类代表字符串,String类定义的变量可以用于
指向字符串对象,然后操作该字符串
Java程序中的所有字符串文字(例如:“abc”)都为此类的对象
String类的特点详解
String其实常被称为不可变字符串类型,它的对象在创建后不能被更改
public class Test {
public static void main(String[] args) {
String ch = "早上";
ch += "中午";
ch += "晚上";
System.out.println(ch);//早上中午晚上
}
}
从上述代码可以看出字符串变量ch指向的字符串对象,为何还要说字符串不可变呢?
字符串对象存在哪里?
以""方式给出的字符串对象,在字符串常量池中存储
String不可变字符串的原因?
String变量每次的修改其实都是产生并指向了新的字符串对象
原来的字符串对象都是没有改变的,所以称为不可变字符串
创建字符串对象的两种方式
方式一:直接使用""定义(推荐方式)
String name = "紫霞";
方式二:通过String类的构造器创建对象
构造器 | 说明 |
public String() | 创建一个空白字符对象,不含任何内容 |
public String(String original) | 根据传入的字符内串容,来创建字符串对象 |
public String(char[ ] ch) | 根据字符数组的内容,来创建字符串对象 |
public String(bytr[ ] ch) | 根据字节数组的内容,来创建字符串对象 |
public class Test {
public static void main(String[] args) {
//方式一
String name = "我爱你中国!";
System.out.println(name);
//方式二
//1、public String():创建一个空白字符串对象,不含任何内容(几乎不用)
String s1 = new String();//s1=""
System.out.println(s1);
//2、public String(String):根据传入的字符串内容,来创建字符串对象(几乎不用)
String s2 = new String("我是中国人!");
System.out.println(s2);//我是中国人!
//3、public String(char[] c ):根据字符数组内容,来创建字符串对象
char[] ch = {'a', 'b', 'c'};
String s3 = new String(ch);
System.out.println(s3);//abc
//4、public String(byte[] b):根据字节数组的内容,来创建字符串对象
byte[] b = {65, 66, 67};
String s4 = new String(b);
System.out.println(s4);//ABC
}
}
这几种方式有何区别?
以""方式给出的字符串对象,在字符串常量池中存储,而且相同内容只会在其中存储一份
通过构造器new对象,没new一次都会产生一个新对象,放在堆内存中
package com.deng.hello;
public class Test {
public static void main(String[] args) {
String s1 = "abc";
String s2 = "abc";
System.out.println(s1 == s2);//true
char[] ch = {'a', 'b', 'c'};
String s3 = new String(ch);
String s4 = new String(ch);
System.out.println(s3 == s4);//FALSE
}
}
String类字符串的内容比较:
推荐使用String类提供的“equals”比较:只关心内容一样即可
方法名 | 说明 |
public boolean equals(object anObject) | 将此字符串与指定对象进行比较,只关心字符内容是否一致 |
public boolean equalsIgnoreCase(String antherString) | 将此字符串与指定对象进行比较,忽略大小写比较字符串,只关心字符内容是否一致 |
//登录验证
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
//1、正确登录账户和密码
String userName = "Java";
String passWord = "123456";
//2、请输入登录账户和密码
Scanner sc = new Scanner(System.in);
System.out.println("登录账户:");
String userNames = sc.next();
System.out.println("账户密码:");
String passWords = sc.next();
//3、字符串比较是否一致
if (userName.equals(userNames) && passWord.equals(passWords)) {
System.out.println("登录成功!");
} else {
System.out.println("用户名或密码错误!");
}
}
}
//忽略大小写比较内容,一般用于验证码这样的业务逻辑
public class Test {
public static void main(String[] args) {
String Code = "7Ac3Bf";
String Code1 = "7aC3bf";
System.out.println(Code.equals(Code1));//false
System.out.println(Code.equalsIgnoreCase(Code1));//true
}
}
String常用API
方法名 | 说明 |
public int length() | 返回此字符串的长度 |
public char charAt(int index) | 获取某个索引位置处的字符 |
public char[] toCharArray(): | 将当前字符串转换成字符数组返回 |
public String substring(int beginIndex,int endIndex) | 根据开始和结束索引进行截取,得到新的字符串(包前不包后) |
public String substring(int beginIndex) | 从传入的索引处截取,截取到尾部,得到新的字符串 |
public String replace(charSequence target,charSequence replacement) | 使用新值,将字符中的旧值替换,得到新的字符串 |
public String[] split(String regex) | 根据传入的规则切割字符串,得到字符串数组返回 |
public boolean contains(charSequence s) | 判断字符串里是否包含某个字符串 |
public boolean startsWith(String prefix) | 判断是否以某个字符串开始 |
public class Test {
public static void main(String[] args) {
//1、public int length() 返回此字符串的长度
System.out.println("------------返回字符串长度--------------");
String name = "我爱你中国";
System.out.println(name.length());//5
//2、public char charAt(int index) 获取某个索引位置处的字符
System.out.println("------------获取某个索引位置的字符-----------");
char c = name.charAt(1);
System.out.println(c);//爱
System.out.println("----------遍历输出字符串----------");
for (int i = 0; i < name.length(); i++) {
System.out.println(name.charAt(i));
}
//3、public char[] toCharArray(): 将当前字符串转换成字符数组返回
System.out.println("-------------将当前字符串转换成字符数组----------------");
char[] chars = name.toCharArray();
for (int i = 0; i < chars.length; i++) {
System.out.println(chars[i]);
}
//4、public String substring(int beginIndex,int endIndex) 根据开始和结束索引进行截取,得到新的字符串(包前不包后)
System.out.println("-----------根据开始和结束索引的位置进行截取-----------");
System.out.println(name.substring(1, 3));
//5、public String substring(int beginIndex) 从传入的索引处截取,截取到尾部,得到新的字符串
System.out.println("------从当前索引截取到最后-------");
System.out.println(name.substring(3));
//6、public String replace(charSequence target,charSequence replacement) 使用新值,将字符中的旧值替换,得到新的字符串
System.out.println("----------字符替换----------");
String name1 = "你实在是太厉害了,棒棒哒!";
System.out.println(name1.replace("棒棒哒", "***"));
//7、public boolean contains(charSequence s) 判断字符串里是否包含某个字符串
System.out.println("------------判断字符串里是否包含某个字符串--------------");
System.out.println(name.contains("中国"));//ture
System.out.println(name.contains("中山"));//false
//8、public boolean startsWith(String prefix) 判断是否以某个字符串开始
System.out.println("-----------判断是否以某个字符串开始------------");
System.out.println(name.startsWith("我爱你"));//true
System.out.println(name.startsWith("我爱"));//true
System.out.println(name.startsWith("我爱1"));//false
//9、public String[] split(String regex) 根据传入的规则切割字符串,得到字符串数组返回
System.out.println("-----------根据字符切割返回字符数组-----------");
String name3 = "小明、小红、小刚、小美、小帅";
String[] s = name3.split("、");
for (int i = 0; i < s.length; i++) {
System.out.println(s[i]);
}
}
}