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);
}
}