目录
字符串de应用
1.String类创建字符串——使用equals和==判断字符串是否相等
什么是字符串
我们已经知道,数字、字母、汉字、符号等等都是字符,如 9、A、a、国、& 等。
那么,什么是字符串呢?
j 是一个字符,a、v、a 也是字符,现在我将这些字符连接起来,java 就是一个由 4 个字符组成的字符串。
同理“字符串”是由 3 个汉字组成的字符串,“4+9” 是一个由数字、符号组成的字符串。
字符串变量的声明
在 Java 里使用 String 声明字符串,我们可以使用如下语句来声明一个字符串变量:
String str; // 声明一个字符串变量 str;
创建字符串的三种方式
字符串变量有个明显的特征,两侧会有双引号,比如 “hello”。
1.通过 new 创建字符串,示例:
String str=new String("我是一个字符串"); // 创建一个字符串并使用字符串变量指向它
System.out.println(str);
执行结果:
我是一个字符串
2.通过赋值,引用字符串常量创建来创建字符串,这也是最常用的创建方式,示例:
String str = "Jeffcky";
System.out.println(str);
执行结果:
jeffcky
- 通过字符数组创建字符串,示例:
char a[] = {'j', 'e', 'f', 'f', 'c', 'k', 'y'};
String str = new String(a);
System.out.println(str);
执行结果:
jeffcky
字符串也可以转化为字符数组:
String str="fhfksdjf";
char[] charArray=str.toCharArray();
equals 和==
equals 和 == 均表示相等的意思,但是它们相等的含义却有所区别。
在使用 == 比较基本数据类型 (byte、short、int、long、float、double、char,boolean)的时候,是通过比较它们实际的值来判断是否相同;而在比较引用数据类型(比如 String)时,是比较两个引用的地址是否相等,也就是是否指向同一对象。
== 运用在基本数据类型(byte, short, int, long、float、double、char,boolean)的时候,通过比较它们实际的值来判断是否相同;而用于比较引用数据类型(比如 String)时是比较俩个引用的地址是否相等,也就是是否指向一个对象。
equals 方法不能用于比较基本数据类型,如果没有对 equals 方法进行重写,比较的是引用类型的变量所指向的对象的地址,由于 String 等类对 equals 方法进行了重写,所以比较的是所指向的对象的内容。
String s1 = new String("java");
String s2 = new String("java");
System.out.println(s1==s2); // 返回的结果为boolean类型
System.out.print(s1.equals(s2)); // 返回的结果为boolean类型 ```
执行结果:
```java
false
true
对于字符串 s1 和 s2,是 new 出来的两个对象,又因为对于 String 来说,== 比较的是是否为同一对象,所以第一个结果为 false。 equals 比较的是对象内容是否相等,所以第二个结果为 true。
String s1 = "java";
String s2 = "java";
System.out.println(s1==s2);
System.out.println(s1.equals(s2));
执行结果:
true
true
对于字符串 s1 和 s2,属于一个对象,又因为对于 String 来说,== 比较的是是否为同一对象,所以第一个结果为 true。 equals 比较的是对象内容是否相等,所以第二个结果也是 true。
2.String类创建字符串——字符数组创建字符串
/*
任务:
1.获取输入值,第一个为整数,代表数组长度,最后一个为%,代表终止输入,中间的值为一组字符
2.把输入值中的第二个到倒数第二个字符赋值给一维数组
3.对数组排序
4.通过字符数组创建字符串
5.输出字符串
*/
import java.util.Arrays;
import java.util.Scanner;
public class StrTest {
public static void main(String[] args) {
// 请在Begin-End间编写代码
/********** Begin **********/
// 第一步:获取输入值,第一个为整数,代表数组长度,最后一个为%,代表终止输入,中间的值为一组字符
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
char a [] = new char [n];
int i=0;
while(!scanner.hasNext("%")){
a[i]=scanner.next().charAt(0);
i++;
}
// 第二步:对字符数组排序
Arrays.sort(a);
// 第三步:通过字符数组的方式创建字符串
//String s = new String(a); 此为直接把字符转换成字符转
String str="";
for(int j = 0;j<n;j++){
str = str + a[j];
}
// 第四步:输出字符串内容
System.out.println(str);
/********** End **********/
}
}
next()和nextLine()的区别
Java中Scanner类中的方法next()和nextLine()都是吸取输入台输入的字符,区别:
next()不会吸取字符前/后的空格/Tab键,只吸取字符,开始吸取字符(字符前后不算)直到遇到空格/Tab键/回车截止吸取;
nextLine()吸取字符前后的空格/Tab键,回车键截止。
关于hasNext() 的用法点击→hasNext
3.String类并置运算——字符串拼接
String 类是不可改变的,所以一旦创建了 String 对象,那它的值就无法改变了。当我们想要把两个 String 类字符串拼接的时候,就需要使用以下两种方法实现。
concat(String str)方法
第一种方法是使用 concat() 方法,具体用法如下:
string1.concat(string2); // 返回 string2 连接 string1 的新字符串
示例:
String start = new String("start"); // 创建字符串 start
String aNew = start.concat("new"); // 在原字符串上拼接新字符串 new
System.out.println(aNew);
执行结果:
startnew
操作符 +
第二种方法是使用操作符 +,这种方法在平常开发中使用的比较多,具体用法如下:
string1+string2; // 返回 string2 连接 string1 的新字符串
示例:
String start = new String("start"); // 创建字符串 start
String aNew =start+"new"; // 在原字符串上拼接新字符串 new
System.out.println(aNew);
执行结果:
startnew
4.String类并置运算——字符串拼接
已知匀加速直线运动的距离公式为:
x=vot+0.5at2
/*
任务:接收给定的加速度(第一个数)和时间(第二个数),计算该时间所处的距离。
具体输出样式见预期输出。
*/
import java.util.Scanner;
public class StrTest {
public static void main(String[] args) {
// 请在Begin-End间编写代码
/********** Begin **********/
// 第一步:接收加速度
Scanner scanner = new Scanner(System.in);
int a = scanner.nextInt();
// 第二步:接收时间
int t=scanner.nextInt();
// 第三步:使用格式化字符串的方式输出距离
double s = 8.0*t+0.5*a*t*t;
// System.out.print("当时间为" + t);
// System.out.print(",加速度为" + a);
// System.out.print("时,距离为" + s);
System.out.printf("当时间为%d,加速度为%d时,距离为%.1f",t,a,s);//为啥double的输出格式是%f,而不是%lf
/********** End **********/
}
}
※java中double输出的格式用%f
在c89和c++中double的输入和输入输出都用%lf
在c99中,double的输出必须用%f,而输入要用%lf
oIER一般使用c++,所以输出直接%lf即可.
5.String类常用方法——字符串转化为字符数组
字符串常用方法
例题:
/*
任务:接收输入值(字符串),将该字符串反转输出,例如接收字符串"abc",输出"cba"。
*/
import java.util.Scanner;
public class StrTest {
public static void main(String[] args) {
// 请在Begin-End间编写代码
/********** Begin **********/
// 第一步:接收输入的字符串
Scanner scanner = new Scanner(System.in);
String str = scanner.next();
// 第二步:将字符串转化为字符数组
int n = str.length();
char a[] = str.toCharArray();
// 第三步:逆序输出字符数组
for(int i=n-1;i>=0;i--){
System.out.print(a[i]);
}
/********** End **********/
}
}
6.String类常用方法——文件名与邮箱验证
本关任务:分别判断 Java 文件名与邮箱格式是否正确。
其中:合法的文件名应该以 .java 结尾(如 Test.java 正确,Test.txt 不正确);合法的邮箱名中至少要包含 @ , 并要求 @ 在 . 之前(如 9876543@qq.com 正确,987654qq.com 不正确)。
1.测试输入:HelloWorld.java laurenyang@edu.com
—— 预期输出 ——
Java文件名正确
邮箱名正确
2.测试输入:.java 123456@qq.@com
—— 预期输出 ——
Java文件名无效
邮箱名无效
import java.util.Scanner;
public class StrTest {
public static void main(String[] args) {
// 请在Begin-End间编写代码
/********** Begin **********/
// 第一步:接收输入的两个字符串,第一个是文件名,第二个是邮箱地址
Scanner scanner = new Scanner(System.in);
String str1 = scanner.next();
String str2 = scanner.next();
// 第二步:判断文件名是否正确
int n = str1.length();
char a[] = str1.toCharArray();
int tt=n; //假设点在最后一位
for(int i=0;i<n;i++){
if(a[i] == '.')
tt=i; //字符串中可能有多个'.',取最后一个‘.’的数组下标
}
if(tt==0) //用于排除.java这种情况,只有后缀没有命名的情况
tt++;
String ss=""; //把文件的后缀提取出来放到字符串中
for(int j=tt+1;j<n;j++){
ss= ss+a[j];
}
if(ss.equals("java")) //判断字符串和要比较的字符串是否一致
System.out.println("Java文件名正确");
else
System.out.println("Java文件名无效");
// 第三步:判断邮箱地址是否正确
int l = str2.length();
char b[] = str2.toCharArray();
int count = l; //定位最后一次出现@的数组下标
for(int j=0;j<l;j++){
if(b[j]=='@'){
count = j;
}
}
for(int k=count+1;k<l;k++){ //判断@后边是否存在'.'
if(b[k]=='.')
count=0; //存在的话,做个标记
}
if(count==0) //如果标记存在,成立
System.out.println("邮箱名正确");
else
System.out.println("邮箱名无效");
/********** End **********/
}
}
7.String类常用方法——花名册
本关任务:接收给定的两行字符串,分别代表两份不同的花名册,请你输出两份花名册的长度各是多少,以及它们是否相同。
测试输入:
张三 李四 王五 小明
李明 张三 小明 王五
预期输出:
11
11
不相同
import java.util.Scanner;
public class StrTest {
public static void main(String[] args) {
// 请在Begin-End间编写代码
/********** Begin **********/
// 第一步:接收输入的两份花名册
Scanner scanner = new Scanner(System.in);
String str1 = scanner.nextLine();
String str2 = scanner.nextLine();
// 第二步:输出第一份花名册的长度(字符串长度)
System.out.println(str1.length());
System.out.println(str2.length());
// 第三步:输出第二份花名册的长度(字符串长度)
// 第四步:判断两个花名册是否相同,若相同,请输出相同,若不同,请输出不相同
if(str1.equals(str2))
System.out.println("相同");
else
System.out.println("不相同");
/********** End **********/
}
}