String
键盘录入字符串
public class demoscanner {
public static void main(String[] args) {
//创建Scanner对象
Scanner sc = new Scanner(System.in);
System.out.println("请输入");
//调用nextLine方法接收字符串
//ctrl + alt + v :快速生成方法的返回值
String s = sc.nextLine();
System.out.println(s);
}
}
sc.nextLine()
是接收字符串 结束标志是回车换行符sc.nextInt()
是接收数字sc.next()
录入数据时遇到空格 和 tab键就不再录入数据了- 建议sc.next()和sc.nextLine()一起使用
String
- 字符串是常量;它们的值在创建之后不能更改。
String常见构造方法
public class StringConstrutor {
public static void main(String[] args) {
//1
String s1 = new String();
//2
char[] chs = {'a','b','c'};
String s2 = new String(chs);
//3
String s3 = new String("1232");
System.out.println(s1);
System.out.println(s2);
System.out.println(s3);
}
}
创建字符串对象的区别对比
- 以“ ”方式给出的字符串,只要字符序列相同(顺序和大小写) ,无论在程序代码中出现几次JVM都只会建立一个String对象 并在字符串常量池中维护
- 字符串常量池:(在JDK7版本开始,从方法区挪到了堆内存)
- 当使用双引号创建字符串对象的时候,系统会检查该字符是否在字符串常量池中存在
- 不存在:创建
- 存在:不会重新创建,而是直接用
- 当使用双引号创建字符串对象的时候,系统会检查该字符是否在字符串常量池中存在
- 双引号创建的字符串对象,在字符串常量池中存储 通过构造方法创建的字符串对象 在堆内存中存储
String字符串的特点
- 注意变量和字符串拼接 与 字符串之间的拼接
字符串的比较
- 字符串是对象,它比较内容是否相同,是通过一个方法来实现的,这个方法是equals()
- public boolean equals(Object anObject): 将此字符串与指定对象进行比较。由于我们比较的是字符串对象。所以参数直接传递一个字符串
public class Demo1Equals {
public static void main(String[] args) {
String s1 = "abc";
String s2 = "ABC";
System.out.println(s1.equals(s2));
System.out.println(s1.equalsIgnoreCase(s2));
}
}
登录案例
package com.demoli.Login;
import com.sun.xml.internal.ws.api.model.wsdl.WSDLOutput;
import java.util.Scanner;
public class Test1 {
public static void main(String[] args) {
//1
String username = "admin";
String psd = "123456";
Scanner sc = new Scanner(System.in);
for (int i = 1; i <= 3; i++) {
System.out.println("请输入账号:");
String scUsername = sc.nextLine();
System.out.println("请输入密码");
String scPsd = sc.nextLine();
if(username.equalsIgnoreCase(scUsername) && psd.equals(scPsd)){
System.out.println("登录成功");
break;
}else {
if(i==3){
System.out.println("明天再来屌毛");
}else {
System.out.println("登录失败,还有"+(3-i)+"次机会");
}
}
}
}
}
遍历字符串
package com.demoli.StringTest;
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入:");
String s = sc.nextLine();
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
System.out.println(c);
}
}
}
package com.demoli.StringTest;
import java.util.Scanner;
public class test2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入:");
String s = sc.nextLine();
char[] chars = s.toCharArray();
for (int i = 0; i < chars.length; i++) {
System.out.println(chars[i]);
}
}
}
- char[] chars = s.toCharArray();
- char c = s.charAt(i);
统计三种类型的字符次数
package com.demoli.StringTest;
import java.util.Scanner;
public class test3 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入:");
String s = sc.nextLine();
int bigCount = 0;
int smallCount =0;
int numCount = 0;
char[] chars = s.toCharArray();
for (int i = 0; i < chars.length; i++) {
char c = chars[i];
if(c>='A' && c <= 'Z'){
bigCount++;
}else if (c>='a' && c<='z'){
smallCount++;
}else if (c>='1' && c<= '9'){
numCount++;
}
}
System.out.println("大写字母字符个数为"+bigCount);
System.out.println("小写字母字符个数为"+smallCount);
System.out.println("数字字符个数为"+numCount);
}
}
手机号屏蔽
//字符串截取
package com.demoli.substring;
public class demo1 {
public static void main(String[] args) {
/*
截取字符串:
String substring(int beginIndex):
从传入的索引位置处 向后截取到末尾,得到新的字符串并返回
String substring(int beginIndex,int endIndex)
从beginIndex索引开始位置开始截取 截取到endIndex索引位置 得到新字符串并返回(包含头 不含尾)
*/
String s = "limadawdsad";
String s1 = s.substring(2);
System.out.println(s1);
String substring = s.substring(0, 2);
System.out.println(substring);
}
}
import java.util.Scanner;
public class test {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入手机号:");
String telString = sc.nextLine();
String start = telString.substring(0, 3);
String end = telString.substring(7);
System.out.println(start+"****"+end);
}
}
请输入手机号:
17191199811
171****9811
敏感词替换
package com.demoli.Test;
import java.util.Scanner;
public class test {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入");
String s = sc.nextLine();
String s1 = s.replace("TMD", "***");
System.out.println(s1);
}
}
切割字符串
package com.demoli.Test;
import com.demoli.domain.Student;
import java.util.Scanner;
public class Test2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入:");
String s = sc.nextLine();
String[] stu_arr = s.split(",");
// String name = stu_arr[0];
// String age = stu_arr[1];
Student student = new Student(stu_arr[0], stu_arr[1]);
String age1 = student.getAge();
String name1 = student.getName();
System.out.println(name1+"的年龄是"+age1);
}
}
StringBuilder概述
-
StringBuilder是一个可变的字符串类 我们可以把它看成是一个容器
-
作用:提高字符串操作效率
-
是一个可变的字符串类 可以看做是一个容器
-
package com.demoli.stringbuilder; public class test { public static void main(String[] args) { StringBuilder sb = new StringBuilder(); sb.append("红色").append("蓝色").append("绿色"); System.out.println(sb); sb.reverse(); System.out.println(sb); System.out.println("sb中字符个数为:"+ sb.length()); String s = sb.toString(); System.out.println(s); } }
区别
- String:内容是不可变的
- StringBuilder : 内容是可变的
对称字符串
package com.demoli.stringbuilder;
import java.util.Scanner;
public class Test2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入字符串");
String s = sc.nextLine();
StringBuilder sb = new StringBuilder(s);
StringBuilder reverse_sb = sb.reverse();
String s1 = reverse_sb.toString();
if (s.equals(s1)){
System.out.println("是");
}else {
System.out.println("否");
}
}
}
String和StringBuilder的互相转化
拼接字符串
package com.demoli.stringbuilder;
public class Test3 {
public static void main(String[] args) {
int[] arr = {1,2,3};
String s = arrayToString(arr);
System.out.println(s);
}
public static String arrayToString(int[] arr){
StringBuilder sb = new StringBuilder("[");
for (int i = 0; i < arr.length; i++) {
if (i == arr.length-1){
sb.append(arr[i]).append("]");
}else {
sb.append(arr[i]).append(",");
}
}
return sb.toString();
}
}