Java中的字符串是一个对象,由java.lang.类表示。它是不可变的,也就是说一旦创建了一个字符串对象,就不能更改它的值。字符串对象可以通过字面值创建,也可以使用构造函数来创建。
创建对象的两种方式1、直接赋值
;
2、new一个
() 创建空白字符串,不含任何内容
( ) 根据传入的字符串,创建字符串对象
(char[] chs) 根据字符数组,创建字符串对象
(byte[] chs) 根据字节数组,创建字符串对象
1、使用直接赋值的方式获取一个字符串对象
2、使用new的方式来获取一个字符串对象
3、传递一个字符串,根据传递的字符串内容在创建一个新的字符串对象
4、传递一个字符数组,根据字符数组的内容再创建一个新的字符串对象
5、 传递一个字节数组,根据字节数组的内容再船舰一个新的字符串对象
这个传递的就是ASCLL码对应的值
字符串的比较基本数据类型
int a=10;
int b=20;
System.out.println(a==b);//false
基本数据类型比较的是数据值
引用数据类型
String s3=new String("abc");
String s4=new String("abc");
System.out.println(s3==s4);//false
引用数据类型比较的是地址值
每次new出来的都是新的地址
大家可以参考这个代码自己试一下哦
字符串比较还会用到两个方法
方法(要比较的字符串) 完全一样结果才是true,否则为false
(要比较的字符串) 忽略大小写的比较
--------------------------------------------------------------------------------------------------------------------------
再来看一个例子
String s1=new String("abc");
String s2="Abc";
System.out.println(s1 == s2);
这个比较的结果又是什么呢
s1=new ("abc");//记录堆里面的地址值
s2="Abc";//记录串池中的地址值
.out.(s1 == s2);//false
串池可以理解为字符串常量值,直接存储的值放在了串池里截取字符串,(串池)在jdk7版本开始,从方法区挪到了堆内存中
而new出来的都存储再堆内存中
当双引号直接赋值时,系统会检查该字符串在串池中是否存在,存在就复用,不存在就创建新的
--------------------------------------------------------------------------------------------------------------------------
我们再看下一个案例
如果是下面这样呢,答案又会是什么?
我们先看结果
居然是false,那么为什么呢?
其实 s1=sc.next();这个操作是在next()里的核心代码里其实是new出来的值,所以两个值肯定不一样
---------------------------------------------------------------------------------------------------------------------
再来看个案例吧
已知正确的用户名和密码,请用程序实现模拟用户登录,总共给三次机会,登录之后,给出相应的提示
首先我们得定义两个变量记录正确的用户名和密码
再定义一个计数器计数,次数不能大于3
接下来就得再while循环里实现手动输入的操作,并且还得将正确的用户名和密码与输入的用户名密码进行比较,比较的话用的就是()
最后再做一次判断,判断count是否等于3,等于三就代表输入了三次还没有登陆成功,要给用户做出反应
完整的测试代码如下
public class StringDemo3 {
public static void main(String[] args) {
//定义两个变量记录正确的用户名和密码
String rightUsername = "admin";
String rightPassword = "123456";
//键盘录入用户名和密码
int count=0;
while(count<3) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入用户名:");
String username = sc.next();
System.out.println("请输入密码:");
String password=sc.next();
//比较
if (username.equals(rightUsername) && password.equals(rightPassword)) {
System.out.println("登陆成功");
break;
} else {
System.out.println("用户登陆失败,用户名或密码有误,您还剩"+(2-count)+"次机会");
count++;
}
}
if(count==3){
System.out.println("已输入三次错误的用户名密码,登录失败");
}
}
}
字符串的练习遍历字符串
需求:键盘录入一个字符串,使用程序实现在控制台遍历该字符串
这里我们需要用到两个方法
char (int index) 根据索引返回字符
int () 返回此字符串的长度
public class StringDemo {
public static void main(String[] args) {
//1.键盘录入一个字符串
Scanner sc=new Scanner(System.in);
System.out.println("请输入一个字符串");
String str=sc.next();
//2.进行遍历
for (int i = 0; i < str.length(); i++) {
//i依次表示字符串的每一个索引
char c = str.charAt(i);
System.out.println(c);
}
}
}
这就是最简单的遍历
统计字符次数
键盘录入一个字符串,统计该字符串中大写字母字符,小写字母字符,数字字符出现的次数
这一题我们需要用到计数器,定义三个计数器分别来计数截取字符串,每当满足条件时+1;其他的都跟上一题差不多
public class StringDemo2 {
public static void main(String[] args) {
//1.键盘录入一个字符串
Scanner sc=new Scanner(System.in);
System.out.println("请输入一个字符串");
String str = sc.next();
int bigCount=0;
int smallCount=0;
int numberCount=0;
//2.进行遍历
for (int i = 0; i < str.length(); i++) {
//i依次表示字符串的每一个索引
char c = str.charAt(i);
if(c>='A'&&c<='Z'){
bigCount++;
} else if (c>='a'&&c<='z') {
smallCount++;
}
else if(c='0'){
numberCount++;
}
}
System.out.println("大写字母有"+bigCount+"个");
System.out.println("小写字母有"+smallCount+"个");
System.out.println("数字字符有"+numberCount+"个");
}
}
拼接字符串
定义一个方法,把int数组中的数据按照指定的格式拼接成一个字符串返回,调用该方法,并在控制台输出结果
例如:数组为int[] arr={1,2,3};
执行方法之后输出的结果为: [1,2,3]
分析:方法里我得判断以下传进来的数据是否有效,如果为null,我就返回空的,如果数组长度为0,我就返回"[]",在这之后就是最主要的步骤了
我们先试着这样运行以下看看结果如何
这样的结果多了一个逗号
我们就得另作一个判断
只要我的i小于数组长度-1,也就是在最后一位之前,我们的都要加上","这样一运行就符合条件了
下面是完整测试代码
public class StringDemo3 {
public static void main(String[] args) {
int[] arr={1,2,3,4};
String result= pinJie(arr);
System.out.println(result);
}
public static String pinJie(int[] arr){
if(arr==null){
return "";
}
if(arr.length==0){
return "[]";
}
String result="[";
for (int i = 0; i < arr.length; i++) {
//i索引 arr[i]元素
result= result+arr[i];
if(i<arr.length-1){
result=result+",";
}
}
//拼接左括号
result=result+"]";
return result;
}
}
运行结果如下
字符串反转
定义一个方法,实现字符串反转,键盘录入一个字符串,调用该方法后,在控制台输出结果
例如:键盘录入abc,输出结果cba
分析:这里我们调用时就要在该方法中倒着遍历字符串,从str.-1开始遍历,话不多说,我们看一下代码吧
public class StringDemo4 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入一个字符串");
String str=sc.next();
fanZhuan(str);
}
public static void fanZhuan(String str){
String result="";
for(int i=str.length()-1;i>=0;i--){
char c=str.charAt(i);
result=result+c;
}
System.out.println(result);
}
}
运行代码如下
金额转换
将小写的金额转换为大写
这是为了录入一个数字,并判断数字是否有效,如果无效则继续输入
这是将输入的数字的每一位转换为大写
补齐七位数字
将大写数字和单位拼接到一起
下面就是完整的测试代码
public class StringDemo5 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int money=0;
while(true){
System.out.println("请输入数字");
money=sc.nextInt();
if(money>=0&&money<=9999999){
break;
}
else{
System.out.println("金额无效");
}
}
String moneyBig="";
while(true){
int ge=money;
String bigNumber=getBigNumber(ge);
moneyBig=bigNumber+moneyBig;
money=money/10;
if(money==0){
break;
}
}
int count=7-moneyBig.length();
for(int i=0;i<count;i++){
moneyBig="零"+moneyBig;
}
System.out.println(moneyBig);
String[] arr = {"佰","拾","万","仟","佰","拾","元"};
String result="";
for (int i = 0; i < moneyBig.length(); i++) {
char c=moneyBig.charAt(i);
result=result+c+arr[i];
}
System.out.println(result);
}
public static String getBigNumber(int number){
String[] arr={"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
return arr[number];
}
}
手机号屏蔽
先介绍两种方法
(int ,int )截取与中间的
注意:包头不包尾,包左不包右,只有返回值才是截取的数据
(int )截取到末尾
有了方法那这一题就好办了
首先获取手机号
截取手机的前三位
截取手机后四位
再进行拼接
最后就是打印的值了
完整测试代码如下
public class StringDemo6 {
public static void main(String[] args) {
//获取一个手机号
String phoneNumber="19913145208";
//截取手机号前三位
String start=phoneNumber.substring(0,3);
//截取手机号后四位
String end=phoneNumber.substring(7);
//拼接
String result=start+"****"+end;
//打印
System.out.println(result);
}
}
这一期就先到这啦,我们下期再见!!!