字符串的应用

字符串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
  1. 通过字符数组创建字符串,示例:
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=vo​t+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 **********/
    }
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

848698119

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值