作业day09

总结:

马上就去学校了。这是寒假最后一次作业。有些编程题暂时还不懂,只是因为明天一天要在车上度过。明天到校后认真看看。都是一些校招题,也有些难度,不过总能理解的。

概念题

1.    StringStringBuffer有什么区别,"=="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”,输入ABCDEF”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 = "ABCDEF"

        splitString(srcStr1, 4); 

        splitString(srcStr2, 6);

    }

 

}

运行结果:

subStrx==我AB

subStrx==我ABC

 

9.     给你一组字符如{134721152},让你输出里面出现次数最多且数值最大的一个,出现几次 

 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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值