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);
}
}

字符串截取的语法格式_截取字符串_字符串截取子串

这一期就先到这啦,我们下期再见!!!

字符串截取的语法格式_截取字符串_字符串截取子串

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注