String类的常用方法及作用
什么是String字符串
1 概念及特点
String类所在的包:lang。(不需要导包)
String类的含义:字符串。
Java当中被 " " 包裹的对象都是字符串对象。
字符串常量不可改变,所有的字符串值的改变都是对象的替换
2 字符串通过 "==" 比较运算符比较的是地址值
3 字符串特定含义
当对字符串重新赋值时,需要重写指定内存区域赋值,不能使用原有的进行赋值
当对现有的字符串进行连接操作的时候 也需要重新指定内存区域赋值,不能使用原有的
任何对字符串的修改都不是在原有的内存区域修改
String 通过字面值的方式去给一个字符串变量赋值, 此时字符串值保存在字符串常量池中字符串常量池中是不会存储相同内容的字符串
String 类常见的构造方法
1 String() 空参构造,创建一个空字符串""
2 String(char[] chars) 根据传递的char类型数组中的字符创建字符串
3 String(String str) 根据传递的字符串去创建字符串
4 String str = "" 直接赋值(常用)
5 String(byte bytes[] , int offset , int length)
创建字符串对象的区别对比
创建字符串对象的方式
1 String(String s)根据传递的字符串去创建字符串
2 String s = "";直接赋值(常用)
不同方式创建的字符串对象的区别
== 比较:
基本数据类型:比较的是数据值
引用数据类型:比较的是地址值
字符串常量有自己的内存地址
字符串常量中,每一个不同的""引起来的字符串地址不同
字符串比较
字符串比较用:对象名.equals
equals方法比较的特点
(目前阶段)
equals比较内容
没有equals比较地址值
equalsIgnoreCase:比较字符串内容时,忽略大小写
字符串的遍历
1 直接遍历数组
1.获取字符串长度length() 注意:数组中是.length属性,字符串中是.length()方法
2.获取字符串中的字符charAt(int index)
案例:
String s1 = "123456";
for (int i = 0; i < s1.length(); i++) {
char c = s1.charAt(i);
System.out.print(c + " ");
}
2 字符串转换为字符数组,再进行遍历
将字符串转换为字符数组的方法:toCharArray() 返回值为char类型数组:char[]
遍历字符数组
String a="1515ageawtweyt2462";
char[] chars = a.toCharArray();
for (int i = 0; i < chars.length; i++) {
System.out.print(chars[i] + " ");
}
将字符数组转换为字符串,直接在定义对象时使用: new String(char[] chars);
统计字符次数
1 统计字符串中大写、小写、数字字符的个数,并将每个种类拼接成新字符串进行输出打印
String s = "123456JNIJASNjsanfjiqn165";
String s1 = "";
String s2 = "";
String s3 = "";
int count1 = 0;
int count2 = 0;
int count3 = 0;
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (c >= 'A' && c <= 'Z') {
count1++;
s1 += c;
}
if (c >= 'a' && c <= 'z') {
count2++;
s2 += c;
}
if (c >= '0' && c <= '9') {
count3++;
s3 += c;
}
}
System.out.println("大写字母有" + count1 + "个" + s1);
System.out.println("小写字母有" + count2 + "个" + s2);
System.out.println("数字字母有" + count3 + "个" + s3);
2 大写转小写 小写转大写
String s = "123456JNIJASNjsanfjiqn165";
String str = "";
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (c >= 'A' && c <= 'Z') {
char c1 = (char) (c + 32);
str += c1;
}
if (c >= 'a' && c <= 'z') {
char c2 = (char) (c - 32);
str += c2;
}
}
System.out.println(str);
字符串截取 屏蔽字符串
1 字符串的截取方法如何使用
方法:
从传入的索引位置开始截取到字符串的末尾,并将得到的字符串返回
substring(int beginIndex)
截取[beginIndex,endIndex],并将得到的字符串返回 包头不包尾
substring(int beginIndex,int endIndex)
截取不存在的索引,报错异常
substring(0,0)
substring(5,4)
字符串替换
1 字符串的替换方法
方法
使用新值替换旧值并返回替换完成后的字符串
字符串变量名.replace("旧值","新值");
替换所有选中的字符串值
字符串变量名 = 字符串变量名.replaceAll("选中的值","更换的值");
替换第一次出现的字符串值
字符串变量名 = 字符串变量名.replaceFirst("选中的值","更换的值");
去掉所有空格
字符串变量名 = 字符串变量名.replace(" ","");
切割字符串
1 字符串的切割方法
split(切割的规则):返回的是切割之后得到的字符串数组
2 切割字符串注意事项
String s = ",,,,,,,,";
String[] strs1 = s.split(",");
System.out.println(Arrays.toString(strs1));
String s2 = "1,2,,,,,3,,,,,";
String[] strs2 = s2.split(",");
System.out.println(Arrays.toString(strs2));
StringBuilder简单认知
StringBuilder:可变的字符串缓冲区,弥补字符串不可变的特点,用来操作字符串(操作的是同一个内存空间,只会改变字符串的内容)
作用:操作字符串,提高效率,在缓冲区内不会浪费对象(不会设置多个变量对象接收);
空参构造
StringBuilder()
有参构造
StringBuilder(String str);
StringBuilder常用的成员方法
1.变量名.append(元素),返回当前的StringBuilder对象(内容可累加);
2.变量名.reverse(),反转("12321" ---> "12321")
3.变量名.length(),统计StringBuilder中存储多少个字符
4.toString(),将StringBuilder转换为String类型,目的:为了使用String类中的方法(链式编程)
String和StringBuilder的转换
1 如何判断字符串是否是对称字符串思路
1.判断字符串是否是对称字符串
String和StringBuilder的相互转化
1.String ---> StringBuilder
StringBuilder(String str)
2.StringBuilder ---> String
使用StringBuilder的toString方法
操作步骤:
1.String -- StringBuilder 目的是使用StringBuilder的reverse方法
2.StringBuilder -- String 使用的是StringBuilder的toString方法
目的:为了使用String的equals方法
原因:因为StringBuilder没有自己的equals方法,此时使用StringBuilder参与 比较,比较的是地址值
String有自己的equals方法,比较的是内容
典型案例
拼接数组
public static void main(String[] args) {
String[] arr = {"a","8","6","5","2","2","h","1"};
String s = toString(arr);
System.out.println(s);
}
public static String toString(Object[] a) {
if (a == null)
return "null";
int iMax = a.length - 1;
if (iMax == -1)
return "[]";
StringBuilder b = new StringBuilder();
b.append('[');
for (int i = 0; ; i++) {
b.append(String.valueOf(a[i]));
if (i == iMax)
return b.append(']').toString();
b.append(", ");
}
}
我国的居民身份证号码,由由十七位数字本体码和一位数字校验码组成。请定义方法判断用户输入的身份证号码是否合法,并在主方法中调用方法测试结果。规则为:号码为18位,不能以数字0开头,前17位只可以是数字,最后一位可以是数字或者大写字母X。
### 训练目标
字符串的遍历、判断
### 训练提示
1、要判断字符串是否符合规则,方法的返回值类型是什么?参数列表是什么?
2、使用String的API,对每种不符合条件的情况作出判断,一旦发现不符合条件就可以结束方法的执行,返回结果了。
3、在主方法中创建键盘录入,调用方法,输入各种数据测试结果。
方法1(个人完成)
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入您的身份证号:");
String str = sc.nextLine();
System.out.println(card(str));
}
public static boolean card(String id) {
if (id.length() == 18) {
if (id.charAt(0) == '0') {
return false;
} else {
for (int i = 0; i < id.length(); i++) {
char[] chars = id.toCharArray();
bianli(i, chars);
for (int j = 0; j < chars.length - 1; j++) {
if (chars[j] < '0' && chars[j] > '9') {
return false;
}
}
return shiba(chars);
}
return true;
}
} else
return false;
}
private static boolean shiba(char[] chars) {
int j = chars.length - 1 ;
if (chars[j] == 'x' || (chars[j] >= '0' && chars[j] <= '9')) {
return true;
} else
return false;
}
private static void bianli(int i, char[] chars) {
if (i == 0) {
for (int i1 = 0; i1 < chars.length; i1++) {
System.out.print(chars[i1] + " ");
}
System.out.println();
}
}
方法2(参考答案)
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入身份证号:");
String id = sc.nextLine();
System.out.println(check(id));
}
public static boolean check(String id) {
if (id == null) {
return false;
}
if (id.startsWith("0")) {
return false;
}
if (id.length() != 18) {
return false;
}
for (int i = 0; i < id.length(); i++) {
char ch = id.charAt(i);
if (i == id.length() - 1) {
if (ch < '0' || ch > '9' && ch != 'X') {
return false;
}
} else {
if (ch < '0' || ch > '9') {
return false;
}
}
}
return true;
}