java 变成题_Java 习题8 参考答案及解析

1.问答题

“\hello”是正确的字符串常量吗?

“你好KU”.length()和”\n\t\t”.length()的值分别是多少?

“Hello”.equals(“hello”)和”java”.equals(“java”)的值分别是多少?

“Bird”.compareTo(“Bird fly”)的值是正数还是负数?

“I love this game”.contains(“love”)的值是true吗?

“RedBird”.indexOf(“Bird)的值是多少?”RedBird”.indexOf(“Cat”)的值是多少?

执行”Integer.parseInt(“12.9”);”会发生异常吗?

问答题解析

1.不是。“\hello”是。

2.4和3。.length()返回字符串的长度,第二个字符串时由三个转义字符构成的。

3.false和true。String对象调用equals(String s)方法比较当前String对象的字符序列是否与参数s指定的String对象的字符序列相同,是区分大小写的,所以第一个为false。

4.负数。String对象调用compareTo(String s)方法,按字典序与指定的String对象s的字符序列比较大小。如果当前String对象的字符序列与s的相同,该方法返回0;如果大于s的字符序列,该方法返回正值,如果小于s的字符序列,该方法返回负值。

5.是true。

String对象调用contains方法判断当前String对象的字符序列是否包含参数s的字符序列

6.3和-1

String 对象的字符序列索引位置从0开始。String对象调用方法indexOf(String str)从当前String对象的字符序列的0索引位置开始检索首次出现str的字符序列的位置,并返回该位置。如果没有检索到,该方法返回的值是-1。

7.会发生NumberFormatException异常,因为字符序列是浮点格式的,不能用int转换.

2.选择题

(1)下列哪个叙述是正确的?

A.String 类是final类,不可以有子类。

B.String类在java.util包中。

C.”abc”==”abc”的值是false。

D.”abc”.equals(“Abc”)的值是true。

(2)下列哪个表达式是正确的(无编译错误)?

A.int m=Float.parseFloat(“567”);

B. int m = Short.parseShort(“567”);

C.byte m = Integer.parseInt(“2”);

D.float m = Float.parseDouble(“2.9”);

(3)对于如下代码,下列哪个叙述是正确的?

A.程序编译出现错误。

B.程序标注的【代码】的输出结果是bird。

C.程序标注的【代码】的输出结果是fly。

D.程序标注的【代码】的输出结果是null。

Java

public class E{

public static void main(String [] args){

String strOne="bird";

String strTwo = strOne;

strOne="fly";

System.out.println(strTwo);//【代码】

}

}

(4)对于下列代码,下列哪个叙述是正确的?

A.程序出现编译错误。

B.无编译错误,在命令行执行程序”Java E I love this game”,程序输出this。

C.无编译错误,在命令行执行程序”Java E let us go”,程序无运行异常。

D.无编译错误,在命令行执行程序”Java E 0 1 2 3 4 5 6 7 8 9”,程序输出3。

Java

public class E{

public static void main(String args[]){

String s1=args[1];

String s2 = args[2];

String s3=args[3];

System.out.println(s3);

}

}

(5)下列哪个叙述是错误的?

A.”9dog”.matches(“\ddog”)的值是true。

B.”12hello567”.replaceAll(“[123456789]+”,”@”)返回的字符串是@hello@。

C. new Date(1000)对象含有的时间是公元后1000小时的时间。

D.”\hello\n”是正确的字符串常量。

选择题解析

1.A

String类在java.lang包中;”abc”==”abc”的值是true,字符常量存储在常量池中,他们的引用是相同的;而”abc”.equals(“Abc”)的值是false,区分大小写的。

2.B

parseXXX(String s)方法是将由“数字”字符组成的字符序列转化成对应的数据类型。

A中不能将float类型赋值给int

C中不能讲int赋值给byte

D中Float类不存在parseDouble方法

3.B

String常量是对象,因此可以把String常量的引用赋值给一个String对象。strOne和strTwo是用户声明的String对象,strOne的值是可以被改变的,如果再进行strOne=”fly”运算,那么strOne中的值将发生变化。

strTwo的=strOne就将strOne指向的常量池对象bird赋值给了strTwo。

4.D

B选项输出的实际是game,因为下标从0开始;

C选项发生数组下标越界异常,因为并没有给arg[3]赋值;

5.C

String对象调用public boolean matches(String regex)方法可以判断当前String对象的字符序列是否和参数regex指定的正则表达式匹配。\d代表0-9中的任何一个数字。所以A选项是匹配的。

replaceAll(String regex,String replacement)方法返回一个新的String对象,把当前String对象的字符序列中所有和参数regex匹配的子字符序列,用参数replacement的字符序列替换后得到字符序列。

B选项中将1-9数字序列替换为@,返回的字符串就是@hello@。

C选项1000表示公元后1000毫秒的时间,公元时间是1970-01-01 0时。

阅读程序

(1)请说出E类中标注的【代码】的输出结果

Java

public class E {

public static void main(String args[]) {

String str = new String("苹果");

modify(str);

System.out.println(str);// 【代码】

}

public static void modify(String s) {

s = s + "好吃";

}

}

(2)请说出E类中标注的【代码】的输出结果。

Java

import java.util.StringTokenizer;

class GetToken {

String s[];

public String getToken(int index, String str) {

StringTokenizer fenxi = new StringTokenizer(str);

int number = fenxi.countTokens();

s = new String[number + 1];

int k = 1;

while (fenxi.hasMoreTokens()) {

String temp = fenxi.nextToken();

s[k] = temp;

k++;

}

if (index <= number) {

return s[index];

} else

return null;

}

}

public class E {

public static void main(String args[]) {

String str = "We Love This Game";

GetToken token = new GetToken();

String s1 = token.getToken(2, str);

String s2 = token.getToken(4, str);

System.out.println(s1 + ":" + s2);//【代码】

}

}

(3)请说出E类中标注的【代码1】和【代码2】的输出结果

Java

public class E {

public static void main(String args[]) {

byte d[] = "abc我们喜欢篮球".getBytes();

System.out.println(d.length);//【代码1】

String s = new String(d, 0, 7);

System.out.println(s);//【代码2】

}

}

(4)请说出E类中标注的【代码】的输出结果。

Java

class MyString {

public String getString(String s) {

StringBuffer str = new StringBuffer();

for (int i = 0; i < s.length(); i++) {

if (i % 2 == 0) {

char c = s.charAt(i);

str.append(c);

}

}

return new String(str);

}

}

public class E {

public static void main(String args[]) {

String s = "1234567890";

MyString ms = new MyString();

System.out.println(ms.getString(s));//【代码】

}

}

(5)请说出E类中标注的【代码】的输出结果

Java

public class E {

public static void main(String args[]) {

String regex = "\\djava\\w{1,}";

String str1 = "88javaookk";

String str2 = "9javaHello";

if (str1.matches(regex)) {

System.out.println(str1);

}

if (str2.matches(regex)) {

System.out.println(str2);//【代码】

}

}

}

阅读程序题解析

1.苹果。

String对象的字符序列是不可修改的,也就是说,String对象的字符序列的字符不能被修改、删除,即String对象的实体是不可以再发生变化的。

2.Love:Game

这道题考察StringTokenizer类使用,该类用于分解String对象的字符序列。首先调用getToken方法传入2和str字符串,StringTokenizer fenxi = new StringTokenizer(str);为String对象str构造一个分析器,使用默认的分隔标记,即空格符、换行符、回车符、Tab符做分隔标记。所以str被分解成四个语言符号:We、Love、This和Game。int number = fenxi.countTokens();调用countTokens方法得到分析器中计数变量的值赋值给number,也就是4.在循环中使用了hasMoreTokens()方法,只要字符序列中还有语言符号,该方法就返回true,循环体内使用nextToken()方法逐个获取字符序列的单词,并存入字符串数组中(k=1,从1开始)。所以结果变为了s[1]=”We”,s[2]=”Love”,s[3]=”This”,s[4]=”Game”.之后用条件语句判断传入的参数是否小于等于计数变量,是的话就返回index作为s数组下标的值也就是Love。

第二个同理,只不过传入的是4,那么s2就是Game。最后输出Love:Game。

3.15

abc我们

getBytes()方法使用平台默认的字符编码,将当前String对象的字符序列存放到字节数组中,并返回数组的引用。第一行输出数组的长度,英文字母占一个字节,汉字占两个字节,所以长度为15.

然后又创建新的String 对象s,在构造方法中传入三个参数,意思是用数组d中从0到6(7-1)位置上的字符去创建String对象输出的s为abc我们

4.13579

这道题考察StringBuffer类使用方法,首先传入字符串s”1234567890”,使用循环遍历字符串,如果遍历到能被2整除的位置,就调用charAt(i)方法得到字符序列该位置上的字符,之后调用append方法将该字符追加到StringBuffer对象的字符序列中。

5.9javaHello

regex是正则表达式,\d代表0-9中任意一个数字,\w代表可用于标识符的字符(不包括美元符号),{1,}表示至少出现1次,调用matches方法判断当前String对象的字符序列是否和参数regex指定的正则表达式匹配,可以发现str1是不匹配的,因为有两个数字,而str2是匹配的,所以输出str2。

编程题

(1)字符串调用public String toUpperCase()方法返回一个字符串,该字符串把当前字符串中的小写字母变成大写字母;字符串调用public String toLowerCase()方法返回一个字符串,该字符串把当前字符串中的大写字母变成小写字母。String类的public String concat(String str)方法返回一个字符串,该字符串是把调用该方法的字符串与参数指定的字符串连接。编写一个程序,练习使用这3个方法。

public class E {

public static void main (String args[ ]) {

String s1,s2,t1="ABCDabcd";

s1=t1.toUpperCase();

s2=t1.toLowerCase();

System.out.println(s1);

System.out.println(s2);

String s3=s1.concat(s2);

System.out.println(s3);

}

}

(2)String类的 Public char charAt(int index)方法可以得到当前字符串index位置上的一个字符。编写程序使用该方法得到一个字符串中的第一个和最后一个字符。

public class E {

public static void main (String args[ ]) {

String s="ABCDabcd";

char cStart=s.charAt(0);

char cEnd = s.charAt(s.length()-1);

System.out.println(cStart);

System.out.println(cEnd);

}

}

(3)编写程序剔除一个字符串中的全部非数字字符,例如,将形如“ab123you”的非数字字符全部剔除,得到字符串“123”。

public class E {

public static void main (String args[ ]) {

String str = "ab123you你是谁?";

String regex = "\\D+";

str = str.replaceAll(regex,"");

System.out.println(str);

}

}

  • 7
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值