Bootstrap

【Java基础】· 常用类习题详解

写在前面


        Hello大家好, 我是【麟-小白】,一位软件工程专业的学生,喜好计算机知识。希望大家能够一起学习进步呀!本人是一名在读大学生,专业水平有限,如发现错误不足之处,请多多指正!谢谢大家!!!

        如果小哥哥小姐姐们对我的文章感兴趣,请不要吝啬你们的小手,多多点赞加关注呀!❤❤❤ 爱你们!!!


目录

写在前面

判断输出结果

String s = new String("xyz");创建了几个String Object

Math.round(11.5)等于多少? Math.round(-11.5)等于多少

是否可以继承String类

String与StringBuffer的区别

一、判断题

1.用运算符“==”比较字符串对象时,只要两个字符串包含的是同一个值,结果便为 true。(×)

2.String 类字符串在创建后可以被修改。(×)

3.方法 replace (String srt1, String srt2)将当前字符串中所有 srt1 子串换成 srt2子串。(√)

4.方法compareTo在所比较的字符串相等时返回 0。(√)

5.方法IndexOf((char ch,-1)返回字符ch在字符串中最后一次出现的位置。(×)

6.方法startsWith()判断当前字符串的前缀是否和指定的字符串一致。(√)

二、选择题

1.下面哪个选项正确地声明了一个字符串数组:(c)

2. 请看下面的程序段:(D)

3.已知 String 对象 s="abcdefg",则s.substring(2, 5)的返回值为__B__。

4.请看下面的代码 String s = “people”; String t = “people”; String c[ ] = {“p”,”e”,”o”,”p”,”l” ,”e”};

5.已知 s 为一个 String 对象,s="abcdefg",则s.charAt(1)的返回值为__B__。

6.请看下面的代码 String s = “good”; 下面选项语句书写正确的是:(AD)

7.正确创建一个含有 5 个元素的字符串数组的选项是:(AB)

8.请看下面的代码

Math.round(11.5)和Math.round(-11.5)的值是多少?

String str = new String(“hello”);创建了哪些对象?

如何将String类型转化Number类型?举例说明String str = “123”;

三、填空题

1.已知sb为StringBuffer的一个实例,且sb= "abcde ",则sb.reverse()后sb的值为_"edcba" _。

2.已知sb为StringBuffer的一个实例,且sb= "abcde ",则sb.delete(1,2)后sb的值为 _"acde "_。

四、编程题

1.请编写一个 Application 实现如下功能:接受命令行中给出的一个字母串,先将该串原样输出,然后判断该串的第一个字母是否为大写,若是大写则统计该串中大写字母的个数,并将所有大写字母输出;否则输出信息串”第一个字母不是大写字母!”。

2.一个应用程序,接受用户输入的一行字符串,统计字符个数,然后反序输出。

3.创建BigDecimalDemo类,在类中分别定义add(),sub(),mul()和div()方法实现加、减、乘、除运算,并输出运算结果。要求除法,可以处理商的精度。

4.编写一个Java应用程序,从键盘读取用户输入两个字符串,并重载3个函数分别实现这两个字符串的拼接、整数相加和浮点数相加。要进行异常处理,对输入的不符合要求的字符串提示给用户,不能使程序崩溃。

5. 模拟一个trim方法,去除字符串两端的空格。

6. 将一个字符串进行反转。将字符串中指定部分进行反转。比如将“abcdefg”反转为”abfedcg”

7. 获取一个字符串在另一个字符串中出现的次数。判断str2在str1中出现的次数

8. 获取两个字符串中最大相同子串。

9. 对字符串中字符进行自然顺序排序

10. 中国有句俗语叫“三天打鱼两天晒网”。如果从1990年1月1日起开始执行“三天打鱼两天晒网”。如何判断在以后的某一天中是“打鱼”还是“晒网”?

15. 求两个日期之间相隔的天数

16.编写java程序,随便输入两个单词,两个单词之间以空格隔开,输出时每个单词的首字母变为大写。如输入:“hello java”,输出为“Hello Java”

17.求出“hijavahehejavahejava”字符串里面包含几个“java字符串。”

18.输出字符串"ddejidsEFALDFfnef2357 3ed"里的大写字母数,小写英文字母数,非英文字母数

19.输入一句5个字的话,然后将它逆序输出。例如:

结语


【常用类知识精讲】

一文带你深入理解【Java基础】· 常用类(下)

一文带你深入理解【Java基础】· 常用类(上)字符串相关类


判断输出结果

public void testString() {
	String str1 = "尚硅谷";
	String str2 = "尚硅谷";
	String str3 = new String("尚硅谷");

	System.out.println(str1 == str2);//true
	System.out.println(str1 == str3);//false
	System.out.println(str1.equals(str3));//true

	str1 = "尚硅谷atguigu.com";
	String str4 = "atguigu.com";
	String str5 = "尚硅谷" + "atguigu.com";

	System.out.println(str1 == str5);//true
	
	String str6 = (str2 + str4).intern();
	System.out.println(str1 == str6);//false  ---->true
}


String s = new String("xyz");创建了几个String Object

答:两个,一个字符对象,一个字符对象引用对象


Math.round(11.5)等于多少? Math.round(-11.5)等于多少

答:  Math.round(11.5)==12;Math.round(-11.5)==-11;round方法返回与参数最接近的长整数,参数加1/2后求其floor


是否可以继承String类

答:String类是final类故不可以继承


String与StringBuffer的区别

答:String的长度是不可变的,StringBuffer的长度是可变的。如果你对字符串中的内容经常进行操作,特别是内容要修改时,那么使用StringBuffer,如果最后需要String,那么使用StringBuffer的toString()方法


一、判断题

1.用运算符“==”比较字符串对象时,只要两个字符串包含的是同一个值,结果便为 true。(×)

知识点:用运算符“==”比较字符串对象,实际上是比较并确定它们是否为内存中的同一个对象。


2.String 类字符串在创建后可以被修改。(×)

知识点:String 类字符串对象是常量,在创建后不能修改。


3.方法 replace (String srt1, String srt2)将当前字符串中所有 srt1 子串换成 srt2子串。(√)

知识点:String 类的方法 replace(String srt1, String srt2)用字符串 srt2 的内容替换当前字符串中遇到的所有 srt1 子串。


4.方法compareTo在所比较的字符串相等时返回 0。(√)

知识点:不仅如此,如果调用compareTo的字符串比作为参数的字符串小,则返回一个负数;如果调用compareTo的字符串比作为参数的字符串大时,则返回一个正数。


5.方法IndexOf((char ch,-1)返回字符ch在字符串中最后一次出现的位置。(×)

知识点:方法lastIndexOf((char ch)返回字符ch在字符串中最后一次出现的位置。


6.方法startsWith()判断当前字符串的前缀是否和指定的字符串一致。(√)

知识点:startsWith(prefix)方法判断当前字符串的前缀是否和指定的字符串 prefix 一致,如果一致,返回 true,否则返回 false。


二、选择题

1.下面哪个选项正确地声明了一个字符串组:(c)

A char str[]

B char str[][]

C String str[]

D String str[10]

知识点:声明数组时,不允许在数组名后面的括号内指定数组元素的个数。


2. 请看下面的程序段:(D)

public class class1 {
    public static void main(String a[]) {
        int x[] = new int[8];
        System.out.println(x[1]);
    } 
}

当编译和执行这段代码时会出现:

A 有一个编译错误为“possible reference before assignment”

B 有一个编译错误为“illegal array declaration syntax”

C 有异常出现为“Null Pointer Exception”

D 正确执行并且输出 0

知识点:一旦数组被创建则它的元素就被初始化为 0


3.已知 String 对象 s="abcdefg",则s.substring(2, 5)的返回值为__B__。

A "bcde"  

B "cde"

C "cdef"

D "def"

知识点:substring(begpos, endpos)取出一个子串,该子串从begpos位置起至 endpos-1为结束。


4.请看下面的代码 String s = “people”; String t = “people”; String c[ ] = {“p”,”e”,”o”,”p”,”l” ,”e”};

下面哪一选项的语句返回值为真:(ACD

A s .equals(t);

B t .equals(c);

C s==t;

D t .equals(new String(“people”));

E t==c;

知识点:s 和 t 不是相同的引用,而在使用==比较引用时,如果两个引用指向内存中的同一个对象,则结果为真。


5.已知 s 为一个 String 对象,s="abcdefg",则s.charAt(1)的返回值为__B__。

A a

B b

C f

D g

知识点:字符串中第一个字符的 index 取值是 0。


6.请看下面的代码 String s = “good”; 下面选项语句书写正确的是:(AD)

A s += “student”;

B char c = s[1];

C intlen = s .length;

D String t = s.toLowerCase( );

知识点:s 是字符串不是数组,因此 B 错误;C 错误是由于 length 后要加括号。


7.正确创建一个含有 5 个元素的字符串数组的选项是:(AB)

A String s[ ] = new String[5]; for(int i=0;i<5;s[i++]=“”);

B String s[ ]={“”, “”, “”, “”, “”};

C String s[5];

D String [5]s;

知识点:每个数组元素在初始化之前都为 null。


8.请看下面的代码

public class class1 {
    String str = new String("Girl");
    char ch[] = {'d', 'b', 'c'};

    public static void main(String args[]) {
        class1 x = new class1();
        x.change(x.str, x.ch);
        System.out.println(x.str + " and " + x.ch[0] + x.ch[1] + x.ch[2]);
    }

    public void change(String str, charch[]) {
        str = "Boy";
        ch[0] = 'a';
    }
}

该程序的输出结果是:(D)

A Boy and dbc

B Boy and abc

C Girl and dbc

D Girl and abc

知识点:由于 change(String str,char ch[ ]) 中str为值参数,所以str=”Boy”的结果不会影响实际参数。


Math.round(11.5)和Math.round(-11.5)的值是多少?

Math.round(11.5):12

Math.round(-11.5):-11


String str = new String(hello);创建了哪些对象?

字符串常量池中有一个对象,堆中有一个字符串对象。


如何将String类型转化Number类型?举例说明String str = 123;

答任意一个都对:

Integer num1 = new Integer(str);

int num2 = Integer.parseInt(str);

Integer num3 = Integer.valueOf(str);


三、填空题

1.已知sb为StringBuffer的一个实例,且sb= "abcde ",则sb.reverse()后sb的值为_"edcba" _。

知识点:reverse() 反转当前字符串。


2.已知sb为StringBuffer的一个实例,且sb= "abcde ",则sb.delete(1,2)后sb的值为 _"acde "_。

知识点:delete(begpos, endpos)删除当前StringBuffer对象中自begpos位置起,到endpos-1位置止的子字符串。


四、编程题

1.请编写一个 Application 实现如下功能:接受命令行中给出的一个字母串,先将该串原样输出,然后判断该串的第一个字母是否为大写,若是大写则统计该串中大写字母的个数,并将所有大写字母输出;否则输出信息串”第一个字母不是大写字母!”。

答案:

public class TestChar {
	public static void main(String args[]) {
		int count = 0;
		if (args.length != 0) {
			System.out.println(args[0]);
			if ((int) args[0].charAt(0) >= 65 && (int) args[0].charAt(0) <= 90) {
				for (int i = 0; i <args[0].length(); i++) {
					if ((int) args[0].charAt(i) >= 65 && (int) args[0].charAt(i) <= 90) {
						System.out.print(args[0].charAt(i));
						count++;
					}
				}
				System.out.println();
				System.out.println("共有 " + count + " 个大写字母。");
			} else
				System.out.println("第一个字母不是大写字母!");
		} else
			System.out.println("请给出命令行参数!");
	}
}


2.一个应用程序,接受用户输入的一行字符串,统计字符个数,然后反序输出。

public class TestString {
	public static void main(String args[]) {
		String str;
		str = args[0];
		int j = str.length();
		System.out.println(str + " " + j);
		for (int i = j - 1; i >= 0; i--) {
			System.out.print(str.charAt(i) + " ");
		}
	}
}


3.创建BigDecimalDemo类,在类中分别定义add(),sub(),mul()和div()方法实现加、减、乘、除运算,并输出运算结果。要求除法,可以处理商的精度。

import java.math.BigDecimal;

public class BigDecimalDemo {
    static final int location = 10;

    /**
     * 这个类提供精确的浮点数运算
     */
    public static BigDecimal add(double value1, double value2) {
        BigDecimal b1 = new BigDecimal(Double.toString(value1));
        BigDecimal b2 = new BigDecimal(Double.toString(value2));
        return b1.add(b2);
    }

    public static BigDecimal sub(double value1, double value2) {
        BigDecimal b1 = new BigDecimal(Double.toString(value1));
        BigDecimal b2 = new BigDecimal(Double.toString(value2));
        return b1.subtract(b2);
    }

    public static BigDecimal mul(double value1, double value2) {
        BigDecimal b1 = new BigDecimal(Double.toString(value1));
        BigDecimal b2 = new BigDecimal(Double.toString(value2));
        return b1.multiply(b2);
    }

    /*
     * 提供精确的除法运算当除不尽时,精确到小数点后10位,以后的数字四舍五入
     */
    public static BigDecimal div(double value1, double value2) {
        return div(value1, value2, location);
    }

    /*
     * @param b 表示需要精确到小数点以后的位数
     */
    public static BigDecimal div(double value1, double value2, int b) {
        if (b < 0) {
            System.out.println("b值必须大于等于0");
        }
        BigDecimal b1 = new BigDecimal(Double.toString(value1));
        BigDecimal b2 = new BigDecimal(Double.toString(value2));
        return b1.divide(b2, b, BigDecimal.ROUND_HALF_UP);
    }

    public static void main(String[] args) {
        BigDecimalDemo b = new BigDecimalDemo();
        System.out.println("两个数字相加结果:" + b.add(-7.5, 8.9));
        System.out.println("两个数字相减结果:" + b.sub(-7.5, 8.9));
        System.out.println("两个数字相乘结果:" + b.mul(-7.5, 8.9));
        System.out.println("两个数字相除结果,结果小数后保留10位:" + b.div(10, 2));
        System.out.println("两个数字相除,结果保留小数后5位:" + b.div(-7.5, 8.9, 5));
    }
}


4.编写一个Java应用程序,从键盘读取用户输入两个字符串,并重载3个函数分别实现这两个字符串的拼接、整数相加和浮点数相加。要进行异常处理,对输入的不符合要求的字符串提示给用户,不能使程序崩溃。

//只能输入数字型的字符串,如果含字母会报错,需要用到正则表达式。这里没有体现。

import java.io.*;

public class Test1 {
    public static void main(String args[]) {
        String s1 = null, s2 = null, ss = null, si = null, sf = null;
        int i1 = 0, i2 = 0;
        float f1 = 0.0f, f2 = 0.0f;
        BufferedReader strin = new BufferedReader(new InputStreamReader(System.in));
        try {
            System.out.print("输入第一个字符串:");
            s1 = strin.readLine();
            System.out.print("输入第二个字符串:");
            s2 = strin.readLine();
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
        i1 = Integer.parseInt(s1);
        i2 = Integer.parseInt(s2);
        f1 = Float.parseFloat(s1);
        f2 = Float.parseFloat(s2);
        ss = strAdd(s1, s2);
        si = strAdd(i1, i2);
        sf = strAdd(f1, f2);
        System.out.println("输入的二个字符串相加结果为:" + ss);
        System.out.println("输入字符串转换为整数相加结果为:" + si);
        System.out.println("输入字符串转换为浮点数相加结果为:" + sf);
    }

    static String strAdd(String str1, String str2) {
        return str1 + str2;
    }

    static String strAdd(int int1, int int2) {
        return String.valueOf(int1 + int2);
    }

    static String strAdd(float flt1, float flt2) {
        return String.valueOf(flt1 + flt2);
    }
}


5. 模拟一个trim方法,去除字符串两端的空格。

public static String myTrim(String str) {
	int start = 0;
	int end = str.length() - 1;
	while(start < end && str.charAt(start) == ' ') {
		start++;
	}
	while(start < end && str.charAt(end) == ' ') {
		end--;
	}
	if(start == end) {
		return "";
	}
	return str.substring(start, end + 1);
}


6. 将一个字符串进行反转。将字符串中指定部分进行反转。比如将“abcdefg”反转为”abfedcg”

拓展:I am a student!   写一个方法:实现输出 !student a am I

方式一:

public static String reverseString(String str, int start, int end) {
	char[] c = str.toCharArray();// 字符串--->字符数组
	return reverseArray(c,start,end);
}
public static String reverseArray(char[] c, int start, int end) {
	for(int i = start, j = end; i < j; i++, j--) {
		char temp = c[i];
		c[i] = c[j];
		c[j] = temp;
	}
	// 字符数组--->字符串
	return new String(c);
}

方式二:

public static String reverseString1(String str, int start, int end) {
	String str1 = str.substring(0, start);
	for(int i = end; i >= start; i--) {
		char c = str.charAt(i);
		str1 += c;
	}
	
	str1 += str.substring(end + 1);
	return str1;
}


7. 获取一个字符串在另一个字符串中出现的次数。判断str2在str1中出现的次数

public int getCount(String mainStr, String subStr) {
    int mainLength = mainStr.length();
    int subLength = subStr.length();
    int count = 0;
    int index = 0;
    if (mainLength >= subLength) {
        while ((index = mainStr.indexOf(subStr, index)) != -1) {
            count++;
            index += subLength;
        }
        return count;
    } else {
        return 0;
    }
}


8. 获取两个字符串中最大相同子串。

public static List<String> getMaxSubString(String str1, String str2) {
	String maxStr = (str1.length() > str2.length()) ? str1 : str2;
	String minStr = (str1.length() < str2.length()) ? str1 : str2;
	int len = minStr.length();
	List<String> list = new ArrayList<>();
	for(int i = 0; i < len; i++) {
		for(int x = 0, y = len - i; y <= len; x++, y++) {
			String str = minStr.substring(x, y);
			if(maxStr.contains(str)) {
				list.add(str);
			}
		}
		if(list.size() != 0){
			return list;
		}
	}
	return null;
}


9. 对字符串中字符进行自然顺序排序

public static String sort(String str) {
	char[] c = str.toCharArray();
	Arrays.sort(c);
	return new String(c);
}


10. 中国有句俗语叫“三天打鱼两天晒网”。如果从1990年1月1日起开始执行“三天打鱼两天晒网”。如何判断在以后的某一天中是“打鱼”还是“晒网”?

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class GetFish {
	public static void main(String[] args) {
		String date1 = "1990/1/1"; // 开始“三天打鱼两天晒网”的日期
		String date2 = "1990/1/10"; // 手动输入的日期
		long day = getQuot(date1, date2);// 传入值计算时间差
		if (day % 5 == 0 || day % 5 == 4) {
			System.out.println("今天是休息日,可以晒晒网");
		} else {
			System.out.println("今天要工作,打鱼了!");
		}
	}

	public static long getQuot(String time1, String time2) {
		long dayDistance = 0;
		SimpleDateFormat ft = new SimpleDateFormat("yyyy/MM/dd");
		try {
			Date date1 = ft.parse(time1);
			Date date2 = ft.parse(time2);
			dayDistance = date2.getTime() - date1.getTime();
			dayDistance = dayDistance / 1000 / 60 / 60 / 24 + 1;
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return dayDistance;
	}
}


15. 求两个日期之间相隔的天数

写一个方法(例如:fun3("2010-09-20","2010-09-21") ),求输入的字符串2010-09-20 与 2010-09-21 之间相隔的天数

public class Time {
    public static void main(String[] args) throws ParseException {
        SimpleDateFormat sp = new SimpleDateFormat("yyyy-MM-dd");
        Time.fun(sp);
    }
 
    public static void fun(SimpleDateFormat sp) throws ParseException {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入开始日期:(格式:2010-09-20)");
        String sta = sc.next();
        System.out.println("请输入结束日期:(格式:2010-09-20)");
        String en = sc.next();
        //开始日期
        Date startTime = sp.parse(sta);
        //结束日期
        Date endTime = sp.parse(en);
        String start = Utility.dateToSrting(startTime, "yyyy年MM月dd日");
        String end = Utility.dateToSrting(endTime, "yyyy年MM月dd日");
        //中间相差
        long betweenTime = (endTime.getTime() - startTime.getTime()) / (1000 * 60 * 60 * 24);
        System.out.println(start + "\t到\t" + end + "\t共相差:" + betweenTime + "天");
    }
}


16.编写java程序,随便输入两个单词,两个单词之间以空格隔开,输出时每个单词的首字母变为大写。如输入:“hello java”,输出为“Hello Java”

public class Test {
    public static void main(String args[]) {
        try {
            BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
            String s = in.readLine();
            StringBuffer s1 = new StringBuffer();
            StringTokenizer st = new StringTokenizer(s);
            while (st.hasMoreTokens()) {
                String str = st.nextToken();
                char c = (str).charAt(0);
                if (c >= 'a' && c <= 'z') {
                    c = (char) ((int) c - 32);
                    s1.append(c);
                } else
                    s1.append(c);
                for (int i = 1; i < (str).length(); i++) {
                    char c1 = (str).charAt(i);
                    s1.append(c1);
                }
                s1.append(" ");
            }
            System.out.print(" " + s1.toString());
        } catch (IOException e) {
            System.out.println(e);
        }
    }
}


17.求出“hijavahehejavahejava”字符串里面包含几个“java字符串。”

String s = "hijavahehejavahejajavavajava";
String findStr = "java";
int javaCount = 0;
for(int i = 0; i <= s.length() - findStr.length(); i++) {
    if(s.substring(i, i+findStr.length()).equalsIgnoreCase(findStr)) {
        javaCount++;
    }
}


18.输出字符串"ddejidsEFALDFfnef2357 3ed"里的大写字母数,小写英文字母数,非英文字母数

public class Classify {
        public static void main(String args[]) {
            String str = "ddejidsEFALDFfnef2357 3ed";           
            char c[] = str.toCharArray();    
            int count1 = 0, count2 = 0, count3 = 0;
            for(int i = 0; i <= str.length() - 1;i++){
                if(c[i] >= 'A' && c[i] <= 'Z'){
                    count1++;
                }
                else if(c[i] >= 'a' && c[i] <= 'z') {
                    count2++;
                }
                else {
                    count3++;
                }
            }
            System.out.println("大写字母数:"+count1);
            System.out.println("小写字母数:"+count2);
            System.out.println("非英文字母数:"+count3);
        }
}


19.输入一句5个字的话,然后将它逆序输出。例如:

原数组:我爱你中国

逆序输出:国中你爱我

public class Test {
    public static void main(String[] args) {
        char[] arr = new char[]{'我', '爱', '你', '中', '国'};
        for (int i = 0, j = arr.length - 1; i < j; i++, j--) {
            char temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
        System.out.println(arr);
    }
}

结语


本人会持续更新文章的哦!希望大家一键三连,你们的鼓励就是作者不断更新的动力

;