3.61.String,StringBuffer,StringBuilder的区别?
参考答案:
String的长度是不可变的;StringBuffer的长度是可变的,如果对字符串中的内容经常进行操作,特别是内容要修改时,则使用StringBuffer,如果最后需要String,那么使用StringBuffer的toString()方法转换成String类型的数据;
StringBuffer是线程安全的;StringBuilder是从JDK5开始,为StringBuffer该类补充了一个单个线程使用的等价类;通常应该优先使用StringBuilder类,因为它支持所有相同的操作,但由于它不执行同步,所以速度更快.
3.62.编写程序将由数组及字符串组成的字符串中的数字截取出来按顺序输出,例如:”ABC137GMNQQ2049PN5FFF”输出结果应该为01234579
参考答案:
public static void main(String[] args){
String str = "ABC137GMNQQ2049PN5FFF";
StringBuilder sb = new StringBuilder();
for(int i = 0; i < str.length(); i++){
char c = str.charAt(i);
if(c >= '0' && c <= '9'){
sb.append(c);
}
}
System.out.println(sb);
char[] ary = sb.toString().toCharArray();
Arrays.sort(ary);
System.out.println(ary);
}
3.63.String s = “abcdefghijklmnopqrstuvwxyz”;编写一段程序,实现”mnop”输出
参考答案:
public static void main(String[] args){
String s = "abcdefghijklmnopqrstuvwxyz";
int a = s.indexOf("mnop");
int n = "mnop".length();
String str = s.substring(a, a + n);
System.out.println(str);
}
3.64.在Java代码中有一个字符串String ss = “abc,efgAA,12q,456,zA,KJD”;在不使用split方法的情况下写一段代码实现按”,”拆分字符的功能,并输出结果
参考答案:
public static void main(String[] args){
String ss = "abc,efgAA,12q,456,zA,KJD";
List<String> list = new ArrayList<String>();
int n1 = 0;
int n2;
do{
n2 = ss.indexOf(",", n1);
if(n2 == -1){
n2 = ss.length();
String str = ss.substring(n1, n2);
list.add(str);
break;
}
String str = ss.substring(n1, n2);
list.add(str);
n1 = n2 + 1;
} while(n2 != -1);
System.out.println(list);
}
3.65.从文件IN.DAT中读取一片英文文章存入到字符串数组xx中,以行为单位对行中以空格或标点符号为分隔的所有单词进行倒排.最后把已处理的字符串(应不含标点符号)仍按进行重新存入字符串数组xx中,最后把结果xx输出到文件OUT.DAT中
参考答案:
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
public class Q065{
public static void main(String[] args) throws Exception{
BufferedReader in = new BufferedReader(
new InputStreamReader(
new BufferedInputStream(
FileOutputStream fos = new FileOutputStream("OUT.DAT");
OutputStreamWriter osw = new OutputStreamWriter(fos,"gbk");
PrintWriter out = new PrintWriter(osw);
String str;
while((str = in.readLine()) != null){
str = str.trim();
if(str.equals("")){//忽略空行
continue;
}
String[] ary = str.split("\\W\\s*");//拆分
ary = f(ary);//倒排
str = toString(ary);//将数组转为字符串
out.println(str);//写入OUT.DAT
}
in.close();
out.flush();
out.close();
}
/*
* 单词倒排
*/
public static String[] f(String[] ary){
int n = ary.length;
String[] ss = new String[n];
for(int i = 0; i < n; i++){
ss[i] = ary[n - 1 - i];
}
return ss;
}
/*
* 将数组转为字符串
*/
public static String toString(String[] ary){
StringBuilder sb = new StringBuilder();
for(int i = 0; i < ary.length; i++){
sb.append(ary[i]);
}
return sb.toSting();
}
}
3.66.Class.forName(String className)的功能
参考答案:
  如果没有加载给定字符串对应的类,要加载这个类,然后返回与带有给定字符串名的类或接口相关联的Class对象.
3.67.谈谈对反射技术的理解
参考答案:
Java中类的反射是一种自我管理机制,通过反射可实现:在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判断任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法.
3.68.如何获得当前日期时间
参考答案:
以下两种方式都可以获取到当前时间:
Date date = new Date();
Calendar c = Calendar.getInstance();
3.69.如何将日期时间转换成想要的格式?如:2017-07-24 13:14:15
参考答案:
public static String getFormatDate(Date date){
DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String str = fmt.format(date);
return str;
}
3.70.编写程序,计算任意两个日期之间的天数
参考答案:
public static double getDays(Calendar c1, Calendar c2){
Date date1 = c1.getTime();
Date date2 = c2.getTime();
return getDays(date1,date2);
}
public static double getDays(Date date1, Date date2){
long time1 = date1.getTime();
long time2 = date2.getTime();
double d = Math.abs((time1-time2))/1000d/60/60/24);
return d;
}
public static double getDays(String str1, String str2) throws ParseException{
DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date date1 = format.parse(str1);
Date date2 = format.parse(str2);
return getDays(date1, date2);
}