简答
1.判断输出结果
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();//intern()方法 在常量池中
System.out.println(str1 == str6);//false ---->true
}
2.String s = new String(“xyz”);创建了几个String Object
解:两个,一个字符对象(常量池),一个字符对象引用对象(堆空间中 指向常量池)
3.是否可以继承String类
解:String类是final类故不可以继承
4.String ,StringBuffer,StringBuilder三者的异同?
解:String:不可变的字符序列;底层使用 char[] 存储
StringBuffer : 可变的字符序列;线城是安全的,效率低;底层使用 char[] 存储
StringBuilder;可变的字符序列;JDK5.0 新增的,线程不安全的,效率低;底层使用 char[]存储
判断
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. 请看下面的程序段:
public class class1{
public static void main(String a[]) {
int x[] = new int[8];
System.out.println(x[1]);
} }
当编译和执行这段代码时会出现: D
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”};
下面哪一选项的语句返回值为真: A D 修改为 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]; //s 是字符串不是数组
C int len = s.length; //length 后要加括号
D String t = s.toLowerCase();
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;
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,charch[]) 中str为值参数,所以str= "Boy" 的结果不会影响实际参数
编程
1.请编写一个 Application 实现如下功能:接受命令行中给出的一个字母串,先将该串原样输出,然后判断该串的第一个字母是否为大
写,若是大写则统计该串中大写字母的个数,并将所有大写字母输出;否则输出信息串”第一个字母不是大写字母!”。
package com.atguigu.exer;
import java.util.Scanner;
public class exer1 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String str = scan.next();
//大写字母 65-90 小写字母:97-122
char firstChar = str.charAt(0);
if((int)(firstChar) >= 65 && (int)(firstChar) <= 90){
for(int i = 0; i < str.length();i++){
int temp = str.charAt(i);
if(temp >= 65 && temp <= 90){
System.out.print((char)temp);
}
}
}else{
System.out.println("第一个字母不是大写字母!");
}
}
}
2.一个应用程序,接受用户输入的一行字符串,统计字符个数,然后反序输出
package com.atguigu.exer;
import java.util.Scanner;
public class exer2 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String str = scan.next();
char[] array = str.toCharArray();
System.out.println("字符串长度为:" + array.length);
for(int i = array.length -1; i >= 0;i--){
System.out.print(array[i]);
}
}
}
3.模拟一个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);
}
4 . 将一个字符串进行反转。将字符串中指定部分进行反转。比如将“abcdefg”反转为”abfedcg”
package com.atguigu.exer;
import java.util.Scanner;
public class exer4 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
//输入原始字符
String str = scan.next();
//输入指定翻转位置的字符
String reverseStr = scan.next();
System.out.println(reverse(str,reverseStr));
}
public static String reverse(String str1,String str2){
char[] array = str1.toCharArray();
int start = str1.indexOf(str2);
int end = start + str2.length();
for(int i = start ; i < start + (str2.length() / 2 ); i++){
char temp = array[i];
int indexExchange = start + end - 1 - i;
array[i] = array[indexExchange];
array[indexExchange] = temp;
}
return new String(array);
}
}
abcdefg
cdefg
abgfedc
5.获取一个字符串在另一个字符串中出现的次数。判断str2在str1中出现的次数
//自己写的
package com.atguigu.exer;
import java.util.Scanner;
public class exer5 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
//输入原始字符
String str = scan.next();
//输入需要查找的字符
String reverseStr = scan.next();
System.out.println(indexofString(str,reverseStr));
}
public static int indexofString(String str1,String str2){
int count = 0;
for(int i = 0; i < str1.length() - str2.length() + 1;i++){
String subString = str1.substring(i,i+str2.length());
//System.out.println("第" + i +"次分割结果:" + subString);
if(subString.equals(str2)){
count++;
}
}
return count;
}
}
//老师给的
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;
}
6 .获取两个字符串中最大相同子串
没写出来
//老师给的
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;
}
7.编写java程序,随便输入两个单词,两个单词之间以空格隔开,输出时每个单词的首字母变为大写。如输入:“hello java”,输出为“Hello Java”
package com.atguigu.exer;
import java.util.Scanner;
public class exer7 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String str1 = scan.next();
String str2 = scan.next();
System.out.print(str1.substring(0,1).toUpperCase() +
str1.substring(1) + " ");
System.out.print(str2.substring(0,1).toUpperCase() +
str2.substring(1));
}
}
8.输出字符串"ddejidsEFALDFfnef23 573ed"里的大写字母,小写英文字母,非英文字母
package com.atguigu.exer;
import java.util.Scanner;
public class exer8 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String str = scan.nextLine();
int len = str.length();
char[] array = str.toCharArray();
char[] upperChar = new char[len];
int upperCount = 0;
char[] lowerChar = new char[len];
int lowerCount = 0;
char[] otherChar = new char[len];
int otherCount = 0;
//大写字母 65-90 小写字母:97-122 ,0-9:48-57
for(int i = 0; i < array.length;i++){
int temp = (int)array[i];
if(temp >= 65 && temp <= 90){
upperChar[upperCount++] = array[i];
}else if(temp >= 97 && temp <= 122){
lowerChar[lowerCount++] = array[i];
}else{
otherChar[otherCount++] = array[i];
}
}
print(upperChar,upperCount,"大写字母");
print(lowerChar,lowerCount,"小写字母");
print(otherChar,otherCount,"非英文字母");
}
public static void print(char[] arr,int count,String str){
System.out.print(str + ":");
for(int i = 0; i < count;i++){
System.out.print(arr[i]);
}
System.out.println();
}
}
参考文献
链接: B站尚硅谷宋红康Java.