Java笔试编程题

1.给定一个字符串,实现翻转并输出,例如输入“abc”,翻转输出效果为“cba”

如果题目限制不能使用Java JDK自带API,那么第一个要想到的是StringBuilder的reverse()方法,当然集合类也有这个方法,为了考虑性能,和不大材小用,这里不考虑集合的方法。如果限定不能使用JDK API,那么基本就有利用字符数组,倒序输出,还有利用临时变量,交换两头的值。
(1)使用StringBuilder的方法

public class Test01 {
    public static void main(String[] args){
        String s = "abc";
        StringBuilder sb = new StringBuilder(s);
        System.out.println(sb.reverse().toString());
    }
}

(2)使用字符数组,倒序输出

public class Test01 {
    public static void main(String[] args){
        String s = "abc";
        //把字符串转换成字符数组
        char[] array = s.toCharArray();
        //定义一个新字符串,用来保存翻转后的字符串
        String s1 = "";
        //循环遍历,此时i的初始值为length-1,即末尾那个
        for (int i=array.length-1;i>=0;i--){
            //每循环一次,就把末尾字母采用加号拼接
            s1 += array[i];
        }
        System.out.println(s1);
    }
}

(3)直接利用加号拼接成新的字符串

public class Test01 {
    public static void main(String[] args){
        String s = "abc";
        //定义一个空字符串,用来保存翻转后新的字符串
        String s1 = "";
        for (int i=0;i<s.length();i++){
            s1 = s.charAt(i) + s1;
        }
        System.out.println(s1);
    }
}

(4)首尾字符调换顺序

public class Test01 {
    public static void main(String[] args){
        String s = "abc";
        //调换首尾字符
        char[] array = s.toCharArray();
        int len = s.length();
        for (int i=0;i<len/2;i++){
            char temp = array[i];
            array[i] = array[len-1-i];
            array[len-1-i] = temp;
        }
        //产生新的字符串
        String s1 = new String(array);
        System.out.println(s1);
    }
}

(5)递归实现
递归算法的话可以每次将字符串首部字符追置到尾部,并拼接成一个新的字符串;当字符串里仅有一个字符存在时,结束递归调用。

public class Test01 {
    public static String reverse(String str){
        //异常情况处理
        if (str == null || str.length() <= 1) {
            return str;
        }

        //递归实现
        return reverse(str.substring(1)) + str.charAt(0);
    }

    public static void main(String[] args){
        String s = "abcdefg";
        String s1 = reverse(s);
        System.out.println(s1);
    }
}

(6)使用栈的方法实现
字符串反转过程,有点类似堆栈操作,将字符串push到堆栈中,然后再pop出来,采用后进后出,实现字符串的反转。

import java.util.Stack;

public class Test01 {
    public static String reverse(String str){
        //异常处理
        if (null == str || str.length() <= 1){
            return str;
        }
        char[] array = str.toCharArray();
        Stack<Character> stack = new Stack<Character>();
        for (char c : array){
            stack.push(c);
        }
        //使用length暂存堆的大小,因为遍历的过程中,会改变堆的大小
        int length = stack.size();
        StringBuilder builder = new StringBuilder();
        for (int i=0;i<length;i++){
            builder.append(stack.pop());
        }
        return builder.toString();
    }

    public static void main(String[] args){
        String s = "abcdefg";
        String s1 = reverse(s);
        System.out.println(s1);
    }
}
2.给定一个字符串,统计字符串中英文字母,空格,数字和其他字符出现的次数
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Test02 {
    public static void show(String str){
        int len = str.length();
        //英文字母的个数
        int letterCount = 0;
        //空格个数
        int blankCount = 0;
        //数字个数
        int numCount = 0;
        //其他字符的个数
        int otherCount = 0;
        for (int i=0;i<len;i++){
            char c = str.charAt(i);
            if ((c>='A' && c<='Z') || (c>='a'&& c<='z')){        //英文字母
                letterCount++;
            }else if (c == ' '){                            //空格
                blankCount++;
            }else if (c>'0'&&c<'9'){                        //数字
                numCount++;
            }else{                                          //其他
                otherCount++;
            }
        }
        System.out.println("英文字母个数:" + letterCount);
        System.out.println("空格个数:" + blankCount);
        System.out.println("数字个数:" + numCount);
        System.out.println("其他字符个数:" + otherCount);
    }

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        System.out.println("请输入你要统计的字符串:");
        String s = br.readLine();
        show(s);
    }
}
3.计算两个日期相差多少分钟
public class Test03 {
    public static void main(String[] args) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date begin = sdf.parse("2013-01-03 11:30:24");
        Date end = sdf.parse("2013-01-03 11:36:22");
        long between = (end.getTime() - begin.getTime()) / 1000;    //除以1000是为了转换成秒
        long min = between / 60;
        System.out.println(min);
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值