判断输出结果
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
}
2.String s = new String("xyz");创建了几个String Object
答:两个,一个字符对象,一个字符对象引用对象
3.Math.round(11.5)等于多少? Math.round(-11.5)等于多少
答: Math.round(11.5)==12;Math.round(-11.5)==-11;round方法返回与参数最接近的长整数,参数加1/2后求其floor
3.是否可以继承String类
答:String类是final类故不可以继承
4.String与StringBuffer的区别
答:String的长度是不可变的,StringBuffer的长度是可变的。如果你对字符串中的内容经常进行操作,特别是内容要修改时,那么使用StringBuffer,如果最后需要String,那么使用StringBuffer的toString()方法
5.判断题
1.用运算符“==”比较字符串对象时,只要两个字符串包含的是同一个值,结果便为 true。(错)
2.String 类字符串在创建后可以被修改。(错)
3.方法 replace (String srt1, String srt2)将当前字符串中所有 srt1 子串换成 srt2子串。(对)
4.方法compareTo在所比较的字符串相等时返回 0。(对)
5.方法IndexOf((char ch,-1)返回字符ch在字符串中最后一次出现的位置。(错)
6.方法startsWith()判断当前字符串的前缀是否和指定的字符串一致。(对)
6.选择题
1.下面哪个选项正确地声明了一个字符串数组:
A char str[]
B char str[][]
C String str[]
D String str[10]
- 请看下面的程序段:
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
3.已知 String 对象 s="abcdefg",则s.substring(2, 5)的返回值为____。
A "bcde"
B "cde"
C "cdef"
D "def"
4.请看下面的代码
String s = “people”;
String t = “people”;
String c[ ] = {“p”,”e”,”o”,”p”,”l” ,”e”};
下面哪一选项的语句返回值为真:
A s .equals(t);
B t .equals(c);
C s==t;
D t .equals(new String(“people”));
E t==c;
5.已知 s 为一个 String 对象,s="abcdefg",则s.charAt(1)的返回值为____。
A a
B b
C f
D g
6.请看下面的代码 String s = “good”; 下面选项语句书写正确的是:
A s += “student”;
B char c = s[1];
C intlen = s .length;
D String t = s.toLowerCase( );
7.正确创建一个含有 5 个元素的字符串数组的选项是:
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;
8.请看下面的代码
public class class1{
String str = new String("Girl");
charch[ ]={'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';
}
}
该程序的输出结果是:
A Boy and dbc
B Boy and abc
C Girl and dbc
D Girl and abc
7.Math.round(11.5)和Math.round(-11.5)的值是多少?
Math.round(11.5):12
Math.round(-11.5):-11
8.String str = new String(“hello”);创建了哪些对象?
字符串常量池中有一个对象,堆中有一个字符串对象。
9.如何将String类型转化Number类型?举例说明String str = “123”;
答任意一个都对:
Integer num1 = new Integer(str);
int num2 = Integer.parseInt(str);
Integer num3 = Integer.valueOf(str);
10.填空题
1.已知sb为StringBuffer的一个实例,且sb= "abcde ",则sB reverse()后sb的值为____。
2.已知sb为StringBuffer的一个实例,且sb= "abcde ",则sB delete(1,2)后sb的值为 ____。
11.请编写一个 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("请给出命令行参数!");
}
}
12.一个应用程序,接受用户输入的一行字符串,统计字符个数,然后反序输出。
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) + " ");
}
}
}
13.创建BigDecimalDemo类,在类中分别定义add(),sub(),mul()和div()方法实现加、减、乘、除运算,并输出运算结果。要求除法,可以处理商的精度。
import java.math.BigDecimal;
public class BigDecimalDemo {
static final int location=10;
/**
* @paramargs
* 这个类提供精确的浮点数运算
*/
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 BigDecimalmul(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));
}
}
14.编写一个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;
BufferedReaderstrin=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);
}
}
15.模拟一个trim方法,去除字符串两端的空格。
16. 将一个字符串进行反转。将字符串中指定部分进行反转。比如将“abcdefg”反转为”abfedcg”
拓展:I am a student! 写一个方法:实现输出 !student a am I
17. 获取一个字符串在另一个字符串中出现的次数。判断str2在str1中出现的次数
18. 获取两个字符串中最大相同子串。
19. 对字符串中字符进行自然顺序排序
20. 中国有句俗语叫“三天打鱼两天晒网”。如果从1990年1月1日起开始执行“三天打鱼两天晒网”。如何判断在以后的某一天中是“打鱼”还是“晒网”?
21.完成MathLib类,可以做加,减,乘,除等功能,其中加法不但可以做数字的加法,还可以做字符串的相加。
22. 任意给定的一串字母,统计字符串里面的大写字母和小写字母的个数。
23.根据传入得路径,获取文件名。例如:D:\myfile\hello.java取出hello.java
24.根据传入得路径,获取文件的类型名。例如:D:\myfile\hello.java取出.java
25. 求两个日期之间相隔的天数
写一个方法(例如:fun3("2010-09-20","2010-09-21") ),求输入的字符串2010-09-20 与 2010-09-21 之间相隔的天数
26.编写java程序,随便输入两个单词,两个单词之间以空格隔开,输出时每个单词的首字母变为大写。如输入:“hello java”,输出为“Hello Java”
27.求出“hijavahehejavahejava”字符串里面包含几个“java字符串。”
28.输出字符串"ddejidsEFALDFfnef2357 3ed"里的大写字母数,小写英文字母数,非英文字母数
29.输入一句5个字的话,然后将它逆序输出。例如:
原数组:我爱你中国
逆序输出:国中你爱我
提示:先声明一个字符串数组,每个汉字作为字符串数组的一个元素,然后再从数组末尾开始循环输出。
【答案】
判断:
1.难度:较难
答案:错误
知识点:用运算符“==”比较字符串对象,实际上是比较并确定它们是否为内存中的同一个
对象。
2.难度:容易
答案:错误
知识点:String 类字符串对象是常量,在创建后不能修改。
3.难度:适中
答案:正确
知识点:String 类的方法 replace(String srt1, String srt2)用字符串 srt2 的内容替换当
前字符串中遇到的所有 srt1 子串。
4.难度:容易
答案:正确
知识点:不仅如此,如果调用compareTo的字符串比作为参数的字符串小,则返回一个负数;
如果调用compareTo的字符串比作为参数的字符串大时,则返回一个正数。
5.难度:适中
答案:错误
知识点:方法lastIndexOf((char ch)返回字符ch在字符串中最后一次出现的位置。
6.难度:适中
答案:正确
知识点:startsWith(prefix)方法判断当前字符串的前缀是否和指定的字符串 prefix 一致,如
果一致,返回 true,否则返回 false。
选择:
1.难度:容易
答案:C
知识点:声明数组时,不允许在数组名后面的括号内指定数组元素的个数。
2.难度:适中
答案:D
知识点:一旦数组被创建则它的元素就被初始化为 0
3.难度:较难
答案:B
知识点:substring(begpos, endpos)取出一个子串,该子串从begpos位置起至 endpos-1
为结束。
4.难度:较难
答案:AD C
知识点:s 和 t 不是相同的引用,而在使用==比较引用时,如果两个引用指向内存中的同一个
对象,则结果为真。
5.难度:容易
答案:B
知识点:字符串中第一个字符的 index 取值是 0。
6.难度:适中
答案:AD
知识点:s 是字符串不是数组,因此 B 错误;C 错误是由于 length 后要加括号。
7.难度:适中
答案:AB
知识点:每个数组元素在初始化之前都为 null。
8.难度:较难
答案:D
知识点:由于 change(String str,charch[ ]) 中str为值参数,所以str=”Boy”的结果不
会影响实际参数。
填空:
1.难度:容易
答案: "edcba"
知识点:reverse() 反转当前字符串。
2难度:适中
答案:"acde "
知识点:delete(begpos, endpos)删除当前StringBuffer对象中自begpos位置起,到
endpos-1位置止的子字符串。
编程:
1.难度:较难
答案:
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) + " ");
}
}
}
public class BigDecimalDemo {
static final int location = 10;
/**
* @paramargs 这个类提供精确的浮点数运算
*/
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.只能输入数字型的字符串,如果含字母会报错,需要用到正则表达式。这里没有体现。
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);
}
}
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);
}
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;
}
public static int getTime(String str1,String str2){
int count = 0;
int len;
while((len = str1.indexOf(str2)) != -1){
count++;
str1 = str1.substring(len + str2.length());
}
return count;
}
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;
}
public static String sort(String str){
char[] c = str.toCharArray();
Arrays.sort(c);
return new String(c);
}
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;
}
}