总结:
马上就去学校了。这是寒假最后一次作业。有些编程题暂时还不懂,只是因为明天一天要在车上度过。明天到校后认真看看。都是一些校招题,也有些难度,不过总能理解的。
概念题
1. String和StringBuffer有什么区别,"=="和equals()有什么区别。
(一) 本质上的区别是:String是不可变类(immutable),而StringBuffer是可变类。
StringBuffer是可以改变字符串长度的,用append("str")的方法可以不断增加内容,
而String则不可以,并且相同的字符串对象是相同的地址引用,
若要String改变值,需要改变String变量的引用(指向新的对象)。
(二) == 是对引用进行判断,对内存地址的判断
equals()是判断引用的值是否相等,对实际存储的值的判断
内存地址相同的值一定相同,但值相同的内存地址就不一定相同
2. char能不能放下一个中文字符,为什么?
char可以放下一个中文字符,因为java采用的是unicode编码,一个字符为两个字节。
编程题
1. 写一个字符串反转的方法,把“abcdefg”转换成“gfedcba”。
package com.jiale.demo01;
public class demo01 {
public static String reverse(String str){
StringBuffer sb = new StringBuffer(str);
sb.reverse().toString();
return sb.toString();
}
public static void main(String[] args) {
// TODO自动生成的方法存根
String str = "abcdefg";
System.out.println("翻转前:"+str);
str = reverse(str);
System.out.println("翻转后:"+str);
}
}
运行结果:
翻转前:abcdefg
翻转后:gfedcba
2. 替换字符串,把“abc.abc.abc”替换成“abc/abc/abc”。
package com.jiale.demo01;
public class demo02 {
public static void main(String[] args) {
// TODO自动生成的方法存根
String rep1 = "abc.abc.abc";
String rep2 = rep1.replaceAll("\\.", "/"); //由于.是特殊字符,需要加上\\转义
System.out.println("替换前:"+rep1);
System.out.println("替换后:"+rep2);
}
}
运行结果:
替换前:abc.abc.abc
替换后:abc/abc/abc
*注:java反斜杠\的用法比较怪异,分为两种场景:
1. 正则表达式
匹配点(.) 或 {、[、(、?、$、^ 、+和 * 这些特殊符号要要前加双斜框,表示字符类的时候也是用双斜杠譬如(\\s[空白符], \\S, \\d, \\D, \\w, \\W),匹配 \ 时要用四斜杠
2. 字符串
譬如\n, \t, \r 回车换行tap之类的只要一个反斜杠即可,在字符串中表示一个反斜杠只用两个反斜杠即可 \\
3. 日期处理,取得从1970到现在的毫秒数,格式为yyyy-MM-dd-HH:mm:ss再转换成String输出。
package com.jiale.demo01;
import java.text.SimpleDateFormat;
import java.util.Date;
public class demo03 {
public static void main(String[] args) {
// TODO自动生成的方法存根
Date date = new Date();
long now = date.getTime();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateStr = df.format(date);
System.out.println("当前时间毫秒数:"+now);
System.out.println("格式化后的时间:"+dateStr);
}
}
输出结果:
当前时间毫秒数:1456474465033
格式化后的时间:2016-02-26 16:14:25
4. *写一个函数,例如:给你的 a b c 则输出 abc acb bac bca cab cba
package com.jiale.demo05;
import java.util.ArrayList;
import java.util.List;
public class demo08 {
public static void main(String[] args) {
// TODO自动生成的方法存根
String s = "ABCD";
List<String> list = list(s,"");
System.out.println(list.size());
System.out.println(list);
}
public static List<String> list(String base,String buff){
List<String> result = new ArrayList<String>();
if(base.length()<=0){
result.add(buff);
System.out.println(result.toString()+"&");
}
for(int i=0;i<base.length();i++){
List<String> temp = list(new StringBuilder(base).deleteCharAt(i).toString(),buff+base.charAt(i));
result.addAll(temp);
}
for(int i=0;i<base.length();i++){
System.out.println(new StringBuilder(base).deleteCharAt(i).toString()+"=");
System.out.println(base.charAt(i)+"*");
System.out.println(buff+"#");
}
return result;
}
}
5. 不使用中间变量 把两个变量的值互换
package com.jiale.demo05;
public class demo05 {
public static void main(String[] args) {
// TODO自动生成的方法存根
int a = 4;
int b = 3;
System.out.println("交换前:"+"\na="+a+"\nb="+b);
a = a*b;
b = a/b;
a = a/b;
System.out.println("交换后:"+"\na="+a+"\nb="+b);
}
}
运行结果:
交换前:
a=4
b=3
交换后:
a=3
b=4
6. 冒泡排序
package com.jiale.demo05;
public class demo06 {
/**
* 冒泡排序
* 冒泡排序方法sort
* @param args
*/
public static int[] sort(int[] list){
int temp;
for(int i = 0; i < list.length; i++){
for(int j = i+1; j < list.length; j++){
if(list[i] <= list[j]){
temp = list[j];
list[j] = list[i];
list[i] = temp;
}
}
}
return list;
}
public static void main(String[] args) {
// TODO自动生成的方法存根
int[] list = {23, 41, 54, 32, 44, 98, 100};
sort(list);
for(int i = 0; i < list.length; i++){
System.out.print(list[i]+" ");
}
}
}
运行结果:
100 98 54 44 41 32 23
7. 题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
package com.jiale.demo05;
import java.util.Scanner;
public class demo07 {
public static void main(String[] args) {
// TODO自动生成的方法存根
int countNum = 0;
int countWord = 0;
int countBlank = 0;
int countOther = 0;
Scanner in = new Scanner(System.in);
System.out.println("请输入字符串:");
String str = in.nextLine();
char[] ch = str.toCharArray();
for(int i=0;i<str.length();i++){
if(ch[i]>='0'&&ch[i]<='9'){
countNum++;
}else if((ch[i]>='a'&&ch[i]<='z')||(ch[i]>='A'&&ch[i]<='Z')){
countWord++;
}else if(ch[i]==' '){
countBlank++;
}else{
countOther++;
}
}
System.out.println("字符串中数字的个数:"+countNum+"\n字符串中的字母的个数:"+countWord+"\n字符串中空格的个数:"+countBlank+"\n字符串中其他字符的个数:"+countOther);
}
}
运行结果:
请输入字符串:
dsfs54dfd212aJHJH
字符串中数字的个数:5
字符串中的字母的个数:12
字符串中空格的个数:0
字符串中其他字符的个数:0
8. *编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”。
package com.jiale.demo05;
public class demo09 {
public static void splitString(String src, int len) {
int byteNum = 0;
if (null == src) {
System.out.println("The source String is null!");
return;
}
byteNum = src.length();
byte bt[] = src.getBytes(); // 将String转换成byte字节数组
if (len > byteNum) {
len = byteNum;
}
// 判断是否出现了截半,截半的话字节对于的ASC码是小于0的值
if (bt[len] < 0) {
String subStrx = new String(bt, 0, --len);
System.out.println("subStrx==" + subStrx);
} else {
String subStrx = new String(bt, 0, len);
System.out.println("subStrx==" + subStrx);
}
}
public static void main(String[] args) {
// TODO自动生成的方法存根
String srcStr1 = "我ABC";
String srcStr2 = "我ABC汉DEF";
splitString(srcStr1, 4);
splitString(srcStr2, 6);
}
}
运行结果:
subStrx==我AB
subStrx==我ABC
9. 给你一组字符如{1,3,4,7,2,1,1,5,2},让你输出里面出现次数最多且数值最大的一个,出现几次
package com.jiale.demo05;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class demo10 {
public static void method(){
int[] datas ={5,2,3,2,4,5,1,2,1,5};
Map<Integer,Integer>map = new HashMap<Integer, Integer>();
for (int i = 0; i < datas.length; i++) {
Integerkey = datas[i];
Integer value = map.get(key);
if(value != null){
map.put(key, ++value);
}else{
map.put(key, 1);
}
}
int maxTime = 0;
int maxTime_num = 0;
Set<Integer>keySet = map.keySet();
Iterator<Integer>it = keySet.iterator();
while(it.hasNext()){
Integerkey = it.next();
Integervalue = map.get(key);
System.out.println(key+":"+value);
if(value >= maxTime){
maxTime = value;
if(key > maxTime_num){
maxTime_num = key;
}
}
}
System.out.println("出现次数最多:"+maxTime+"次;且最大的数是:"+maxTime_num);
}
public static void main(String[] args) {
// TODO自动生成的方法存根
method();
}
}
运行结果:
1:2
2:3
3:1
4:1
5:3
出现次数最多:3次;且最大的数是:5