天梯180401
1. Java中用正则表达式截取字符串中第一个出现的英文左括号之前的字符串。比如:北京市(海淀区)(朝阳区)(西城区),截取结果为:北京市。正则表达式为()
A. ".*?(?=\\()"
B. ".*?(?=\()"
C. ".*(?=\\()"
D. ".*(?=\()"
2. HashMap和HashTable的描述,错误的是?
A. 他们都实现了Map接口。
B. HashMap非线程安全,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap就必须为之提供额外同步。
C. HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。
D. 通过contains方法可以判断一个对象是否存在于HashMap或者Hashtable中。
3. 如下代码的输出结果是什么?
public class Test {
public int aMethod(){
static int i = 0;
i++;
return i;
}
public static void main(String args[]){
Test test = new Test();
test.aMethod();
int j = test.aMethod();
System.out.println(j);
}
}
A. 0
B. 1
C. 2
D. 编译失败
4. 有如下一段代码,请选择其运行结果()
public class StringDemo{
private static final String MESSAGE="taobao";
public static void main(String [] args) {
String a ="tao"+"bao";
String b="tao";
String c="bao";
System.out.println(a==MESSAGE);
System.out.println((b+c)==MESSAGE);
}
}
A. true true
B. false false
C. true false
D. false true
5. 下列不属于java语言鲁棒性特点的是()
A. java能检查程序在编译和运行时的错误
B. java能运行虚拟机实现跨平台
C. java自己操纵内存减少了内存出错的可能性
D. java还实现了真数组,避免了覆盖数据的可能
//--------------分割线-----------------
A
D
D
C
B
答案详解:
1. String regex = “.*?(?=\\()”;
Pattern pattern = Pattern.compile(regex);
Matcher matcher = patter.matcher(string);
if(matcher.find()){
System.out.print(matcher.group(0));
}
选A,这道题的知识点是 正则表达式中的 贪婪匹配。
·正则表达式中的元字符:
“.” :匹配除\n换行符的任意字符
“*” :匹配前面子表达式任意次
“?” :匹配前面子表达式的0次或1次,如果前面也是元字符,那么它就是非贪婪匹配了(默认是贪婪匹配:abcaxc 正则:ab.*c 匹配到abcaxc)
·(?=assert)的形式叫做 顺序环视,也就是前面 .*? 匹配到的字符后面必须要紧接着有assert中声明的值,也就是左括号(\\都是转义字符),但是匹配到的串不包含assert
2. Hashtable 中, key 和 value 都不允许出现 null 值。 在 HashMap 中, null 可以作为键,这样的键只有一个;可以有一个或多个键所对应的值为 null 。当 get() 方法返回 null 值时,即可以表示 HashMap 中没有该键,也可以表示该键所对应的值为 null 。因此,在 HashMap 中不能由 get() 方法来判断 HashMap 中是否存在某个键, 而应该用 containsKey() 方法来判断。
//以下是Hashtable的方法
public synchronized boolean contains(Object value)
public synchronized boolean containsKey(Object key)
public boolean containsValue(Object value)
//以下是HashMap中的方法,注意,没有contains方法,所以,D错误
public boolean containsKey(Object key)
public boolean containsValue(Object value)
3. Java中静态变量只能在类主体中定义,不能在方法中定义。 静态变量属于类所有而不属于方法。
4. 第一个比较: taobao在字符串常量池已经存在,因此String a = "tao" + "bao";执行后,a也指向常量池中该字符串,因此引用相同
第二个比较: 1. Java对String的相加是通过StringBuffer实现的,先构造一个StringBuffer里面存放"tao",然后调用append()方法追加"bao",然后将值为"taobao"的StringBuffer转化成String对象。
2. 很明显新返回的对象和MESSAGE不是指向同一个地方,返回的对象指向堆中String对象,MESSAGE指向常量区中字符串,即两者引用不同
5. 鲁棒性(Robust,即健壮性)
B选项虽然描述也对,但是,不应该把它归结于鲁棒性。