java字符串综合练习
制作不易!点个关注!给大家带来更多的价值!
java字符串综合练习
1.Java字符串之String类创建字符串之使用equals和==判断字符串是否相等
任务描述
本关任务:使用 new 创建两个字符串(获取键盘输入的两个字符串,中间用空格分隔),并分别通过 equals 和 == 判断字符串是否相等。
相关知识
为了完成本关任务,你需要掌握:
1.什么是字符串;
2.字符串变量的声明;
2.创建字符串的三种方式;
3.equals 和 == 的使用。
什么是字符串
我们已经知道,数字、字母、汉字、符号等等都是字符,如 9、A、a、国、& 等。
那么,什么是字符串呢?
j 是一个字符,a、v、a 也是字符,现在我将这些字符连接起来,java 就是一个由 4 个字符组成的字符串。
同理“字符串”是由 3 个汉字组成的字符串,“4+9” 是一个由数字、符号组成的字符串。
字符串变量的声明
在 Java 里使用 String 声明字符串,我们可以使用如下语句来声明一个字符串变量:
String str; // 声明一个字符串变量 str;
创建字符串的三种方式
字符串变量有个明显的特征,两侧会有双引号,比如 “hello”。
通过 new 创建字符串,示例:
String str=new String(“我是一个字符串”); // 创建一个字符串并使用字符串变量指向它
System.out.println(str);
执行结果:
我是一个字符串
通过赋值,引用字符串常量创建来创建字符串,这也是最常用的创建方式,示例:
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(s1s2); // 返回的结果为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。
编程要求
仔细阅读右侧编辑区内给出的代码框架及注释,按照提示编写程序代码。
测试说明
平台将使用测试集运行你编写的程序代码,若全部的运行结果正确,则通关。
可在右侧 “测试结果”区查看具体的测试集详情。
开始你的任务吧,祝你成功!
/*
任务:
1.获取输入的两个字符串;
2.使用new分别创建两个字符串对象;
3.输出字符串;
4.分别使用equals和==比较这两个字符串是否相等。
输出样式见预期输出。
*/
import java.util.Scanner;
public class StrTest {
public static void main(String[] args) {
// 请在Begin-End间编写代码
/********** Begin **********/
Scanner scanner = new Scanner(System.in);
String s = scanner.next();
String s1 = scanner.next();
// 第一步:使用new创建第一个字符串对象,并输出该字符串
System.out.println("获取的第一个字符串:"+s);
// 第二步:使用new创建第二个字符串对象,并输出该字符串
System.out.println("获取的第二个字符串:"+s1);
// 第三步:分别使用==和equals比较创建的两个字符串是否相等,并输出比较结果
System.out.print("使用==比较的结果:");
System.out.println(s==s1);
System.out.println("使用equals比较的结果:"+s.equals(s1));
/********** End **********/
}
}
2.Java字符串之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 m= scanner.nextInt();
char [] arr=new char[m]; // 定义原一维数组
int n=0;
while(!scanner.hasNext("%")){
arr[n] = scanner.next().charAt(0);
n++;
}
// 第二步:对字符数组排序
Arrays.sort(arr);
// 第三步:通过字符数组的方式创建字符串
String s = new String(arr);
// 第四步:输出字符串内容
System.out.print(s);
/********** End **********/
}
}
3.Java字符串之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
编程要求
仔细阅读右侧编辑区内给出的代码框架及注释,按照提示编写程序代码。
测试说明
平台将使用测试集运行你编写的程序代码,若全部的运行结果正确,则通关。
可在右侧 “测试结果”区查看具体的测试集详情。
例:
测试输入:
小二 王
预期输出
王小二
开始你的任务吧,祝你成功!
/*
任务:接收给定的加速度(第一个数)和时间(第二个数),计算该时间所处的距离。
具体输出样式见预期输出。
*/
import java.util.Scanner;
public class StrTest {
public static void main(String[] args) {
// 请在Begin-End间编写代码
/********** Begin **********/
Scanner input = new Scanner(System.in);
// 第一步:接收加速度
int a = input.nextInt();
// 第二步:接收时间
int t = input.nextInt();
// 第三步:使用格式化字符串的方式输出距离
double x = 8 * t + 0.5 * a * t * t;
System.out.println("当时间为" + t + ",加速度为" + a + "时,距离为" + x);
/********** End **********/
}
}
4.Java字符串之String类常用方法之满足条件的子字符串
任务描述
本关任务:接收给定的一个字符串,对该字符串做如下处理:
1.去除前后空格;
2.找出字符串中以字母 a 开头,以字母 z 结尾以及含有 li 的单词(如:alsliz);
3.输出字符串中共有多少个满足上述条件的单词;
4.将满足条件的单词分别转化为大写和小写输出。
编程要求
仔细阅读右侧编辑区内给出的代码框架及注释,按照提示编写程序代码。
测试说明
平台将使用测试集运行你编写的程序代码,若全部的运行结果正确,则通关。
可在右侧 “测试结果”区查看具体的测试集详情。
例:
测试输入:
asDliz,SDefs,ahdhjlid,sEfds
预期输出:
将符合条件的子字符串转化为小写:abcliz
将符合条件的子字符串转化为大写:ABCLIZ
将符合条件的子字符串转化为小写:alisdz
将符合条件的子字符串转化为大写:ALISDZ
字符串中共有符合条件的子字符串2个
测试输入:
asdlsd,sd,df,dfv,fAsw,ff
预期输出:
asdlsd,sd,df,dfv,fAsw,ff该字符串没有符合条件的子字符串
开始你的任务吧,祝你成功!
import java.util.Scanner;
import java.util.StringTokenizer;
public class StrTest {
public static void main(String[] args) {
// 请在Begin-End间编写代码
/********** Begin **********/
// 第一步:接收输入的字符串
Scanner sc = new Scanner(System.in);
String s = sc.next();
StringTokenizer stringtokenizer = new StringTokenizer(s,",");
String[] a = new String[stringtokenizer.countTokens()+1];
String[] b = new String[stringtokenizer.countTokens()+1];
int i=0,j=0,k=0;
while (stringtokenizer.hasMoreTokens()){
a[i] = stringtokenizer.nextToken();
i++;
}
while (j!=i){
boolean matches = a[j].matches("^a.*li.*z$");
if(matches){
b[k] = a[j];
k++;
}
j++;
}
for(i=0;i<k;i++){
//System.out.println(b[i]);
System.out.println("将符合条件的子字符串转化为小写:"+b[i].toLowerCase());
System.out.println("将符合条件的子字符串转化为大写:"+b[i].toUpperCase());
}
if(k!=0) System.out.println("字符串中共有符合条件的子字符串"+k+"个");
else System.out.println(s+"该字符串没有符合条件的子字符串");
// 第二步:对字符串做指定操作操作
/********** End **********/
}
}
5.Java字符串之String类格式化字符串之日期时间格式化输出
任务描述
本关任务:接收给定的日期时间字符串,输出该日期是该年中的第几天、年月日、24 小时制的时、两位数的分钟以及两位数的秒钟。
相关知识
为了完成本关任务,你需要掌握:
1.日期的格式化;
2.时间的格式化;
3.时间与日期的组合格式化。
日期的格式化
在程序设计中,经常涉及到时间以及日期的输入输出,想要输出满意的日期和时间格式需要大量的代码和算法才能实现。Java 中 format() 方法通过使用特定的转换字符作为参数来实现对时间和日期的格式化,极大的方便了平时的使用。
我们可以使用如下代码得到当前日期是当月的第几天:
// 创建Date对象,date对象表示特定日期和时间
Date date = new Date(“2020/02/03 20:50:31”);
System.out.println(date);
System.out.println(String.format(“今天是一个月中的第:%te天”,date));
执行结果:
Mon Feb 03 20:50:31 CST 2020
今天是一个月中的第:3天
上述代码中 %te 是转换符,常用的日期转换符如下表所示。
示例:
// 创建Date对象,Date对象表示系统当前日期时间
Date date = new Date();
System.out.println(date);
String day = String.format("%te", date); // 一个月中的某一天。
String month = String.format("%tb", date); // 指定语言环境下的月份
String week = String.format("%ta", date); // 指定环境下星期
String foryear = String.format("%tY", date); // 四位年份
String oneyearday = String.format("%tj", date); // 一年中的第几天
String onemonthday = String.format("%td", date); // 一个月中的第几天
String onemonth = String.format("%tm", date); // 月份(纯数字)
String twoyear = String.format("%ty", date); // 两位数年份
System.out.println(day);
System.out.println(month);
System.out.println(week);
System.out.println(foryear);
System.out.println(oneyearday);
System.out.println(onemonthday);
System.out.println(onemonth);
System.out.println(twoyear);
执行结果:
Mon Feb 03 21:04:26 CST 2020 3 二月 星期一 2020 034 03 02 20
时间的格式化
使用 format() 方法,不仅能够实现日期的格式化,还可以实现时间的格式化,它可以将时间格式化为时,分,秒,毫秒。格式化时间的转换符如下表。
使用示例:
Date date = new Date();
System.out.println(date);
String hour=String.format("%tH", date); // 格式化date,24小时制的小时。
String minute=String.format("%tM", date); // 两位数的分钟。
String second=String.format("%tS", date); // 两位数的秒钟。
System.out.println("现在的时间是:"+hour+"点"+minute+"分"+second+"秒"); // 输出时间。
执行结果:
Mon Feb 03 21:11:42 CST 2020
现在的时间是:21点11分42秒
时间与日期的组合格式化
在日常使用中,我们通常需要输出固定格式的时间日期,一方面,我们可以通过组合以上格式化转化符来实现(较麻烦),另一方面,我们可以使用以下固定的格式化来实现。
示例:
Date date = new Date();
System.out.println(date);
// 第一种日期格式 2019-03-26
String day1=String.format(“%tF”, date);
// 第二种日期格式 03/26/19
String day2=String.format(“%tD”, date);
// 第一种时间格式 03:22:34 下午 (时:分:秒 PM/AM 12小时制)
String time1=String.format(“%tr”, date);
// 第二种时间格式 15:34:23 (时:分:秒 24小时制)
String time2=String.format(“%tT”, date);
// 第三种时间格式 15:23 (时:分)
String time3=String.format(“%tR”, date);
// 输出全部时间日期信息
String timeandday=String.format(“%tc”,date);
// 输出各种格式化时间日期
System.out.println(day1);
System.out.println(day2);
System.out.println(time1);
System.out.println(time2);
System.out.println(time3);
System.out.println(timeandday);
执行结果:
Mon Feb 03 21:34:37 CST 2020 2020-02-03 02/03/20 09:34:37 下午 21:34:37 21:34 星期一 二月 03 21:34:37 CST 2020
编程要求
仔细阅读右侧编辑区内给出的代码框架及注释,按照提示编写程序代码。
测试说明
平台将使用测试集运行你编写的程序代码,若全部的运行结果正确,则通关。
可在右侧 “测试结果”区查看具体的测试集详情。
例:
测试输入:
1900/12/25 12:02:31
预期输出:
该日期是这一年中的第359天 该日期的年月日为:1900-12-25 时:12 分:02 秒:31
注意:最后有一个空行。
开始你的任务吧,祝你成功!
import java.util.Date;
import java.util.Scanner;
public class StrTest {
public static void main(String[] args) {
// 请在Begin-End间编写代码
/********** Begin **********/
Scanner sc = new Scanner(System.in);
String str = sc.nextLine(); //输入字符串
Date date = new Date(str); //破译字符串
String oneyearday = String.format("%tj",date); //返回一年中的第几天
System.out.println("该日期是这一年中的第" + oneyearday + "天");
String foryear = String.format("%tY", date); //返回4位数年份
String onemonth = String.format("%tm", date); //返回2位数月份
String onemonthday = String.format("%td", date); //返回2位数日份
System.out.println("该日期的年月日为:" + foryear + "-" + onemonth + "-" + onemonthday);
String hour = String.format("%tH", date); //24小时制的小时
String minute = String.format("%tM", date);
String second = String.format("%tS", date);
System.out.println("时:" + hour + "\n分:" + minute + "\n秒:" + second);
}
}
6.Java字符串之String类格式化字符串之温度转化
任务描述
本关任务:接受给定的摄氏度,格式化输出对应的华氏度(double 类型,保留两位小数)。
转化公式:
f=c∗(9/5)+32
其中f为华氏温度,c为摄氏度。
编程要求
仔细阅读右侧编辑区内给出的代码框架及注释,按照提示编写程序代码。
测试说明
平台将使用测试集运行你编写的程序代码,若全部的运行结果正确,则通关。
可在右侧 “测试结果”区查看具体的测试集详情。
例:
测试输入:
43
预期输出:
摄氏温度43对应的华氏温度为:109.40
开始你的任务吧,祝你成功!
import java.util.Scanner;
public class StrTest {
public static void main(String[] args) {
// 请在Begin-End间编写代码
/********** Begin **********/
// 接收给定的摄氏温度
Scanner input = new Scanner(System.in);
int c = input.nextInt();
// 格式化输出对应的华氏温度
double f = c * (9 * 1.0 / 5) + 32;
System.out.println("摄氏温度" + c + "对应的华氏温度为:" + String.format("%.2f",f));
/********** End **********/
}
}
7.Java字符串之字符串、字符数组与字节数组间的使用之统计单词中各字母的ASCII码值的和
任务描述
本关任务:统计给定单词中各字母的 ASCII 码值的和。
编程要求
仔细阅读右侧编辑区内给出的代码框架及注释,在 Begin-End 间编写程序代码,统计给定单词中各字母的 ASCII 码值的和,具体要求如下:
接收给定的字符串(单词)(如:hello);
累加单词中各字母的 ASCII 码值;
输出累加值。
测试说明
平台将使用测试集运行你编写的程序代码,若全部的运行结果正确,则通关。
例:
测试输入:
hello
预期输出:
532
开始你的任务吧,祝你成功!
import java.io.*;
import java.util.Arrays;
import java.util.Scanner;
public class FileTest {
public static void main(String[] args) throws IOException {
Scanner sc = new Scanner(System.in);
String str = sc.next();
int sum = 0;
char[] chars = str.toCharArray();
for (int i = 0 ; i < chars.length; i++){
sum = sum + (int)(chars[i]);
}
System.out.print(sum);
}
}