字符串数组排序
创建一个长度是8的字符串数组
使用8个长度是5的随机字符串初始化这个数组
对这个数组进行排序,按照每个字符串的首字母排序(无视大小写)
注1: 不能使用Arrays.sort() 要自己写
注2: 无视大小写,即 Axxxx 和 axxxxx 没有先后顺序
解题思路:获得随机字符串数组,然后冒泡排序时候获得首字母,统一转换为大写或小写比较就行,稳定排序。
import java.util.Random;
public class TestNumber {
public static String getString(int k){
String str = "";
while(str.length() < k){
int str_num = new Random().nextInt(75)+48;
char c = (char) str_num;
if(Character.isDigit(c)||Character.isLetter(c))
str += String.valueOf(c);
}
return str;
}
public static void sort_arr(String[] arr){
boolean f= true;
while(f){
f = false;
int k = 0;
String temp = arr[0];
for(int i = 1;i < arr.length;i++){
char ch = Character.toLowerCase(temp.charAt(0));
char ch2 = Character.toLowerCase(arr[i].charAt(0));
if(ch > ch2){
arr[k] = arr[i];
arr[i] = temp;
k = i;
f = true;
}else{
k = i;
temp = arr[i];
}
}
}
}
public static void main(String[] args) {
String str[] = new String[8];
for(int i=0;i<8;i++)
str[i] = TestNumber.getString(5);
for(String s: str)
System.out.println(s);
TestNumber.sort_arr(str);
System.out.println();
for(String s: str)
System.out.println(s);
}
}
比较字符串
创建一个长度是100的字符串数组
使用长度是2的随机字符填充该字符串数组
统计这个字符串数组里重复的字符串有多少种
解题思路:获得随机字符串数组,利用HashSet元素不重复的特性判断多少重复字符串。
import java.util.HashSet;
import java.util.Random;
public class TestString {
public static String getStr(int k){
String str = "";
while(str.length() < k){
int str_num = new Random().nextInt(75)+48;
char c = (char) str_num;
if(Character.isDigit(c)||Character.isLetter(c))
str += String.valueOf(c);
}
str.contains("s");
return str;
}
public static void main(String[] args) {
String ss[] = new String[100];
HashSet<String> sites = new HashSet<String>();
for(int i = 0;i < 100;i++){
String s = TestString.getStr(2);
if(i%25 == 0) System.out.println();
System.out.print(s+"\t");
ss[i] = s;
sites.add(s);
}
System.out.println();
System.out.println(100-sites.size());
}
}
练习-日期格式化
准备一个长度是9的日期数组,使用1970年-2000年之间的随机日期初始化该数组 按照这些日期的时间进行升序排序,比如 1988-1-21 12:33:22 就会排在 1978-4-21 19:07:23 前面,因为它的时间更小,虽然日期更大。
解题思路:得到随机日期数组后,设置只有时间的字符串格式sdf2 ,时间字符串转化为时间整型,再放入TreeMap<时间整型, 原时间数组下标> 中,TreeMap按照key自排序后顺序输出value顺序的原时间数组。
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;
import java.util.TreeMap;
public class TestDate {
public static void main(String[] args) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
SimpleDateFormat sdf2 = new SimpleDateFormat("HHmmss");
String start = "1970/01/01 00:00:00";
String end= "1999/12/31 23:59:59";
Date startDate = sdf.parse(start);
Date endDate =sdf.parse(end);
long startTime = startDate.getTime();
long endTime = endDate.getTime();
String da_sz[]=new String[9];
TreeMap<Integer, Integer> tmap = new TreeMap<>();
System.out.println("得到的随机日期数组:");
for (int i = 0; i < 9; i++) {
long time = (long) (Math.random() * (endTime - startTime+1) + startTime);
da_sz[i] = sdf.format(time);
System.out.print(da_sz[i]+"\t");
if((i+1)%3 == 0) System.out.println();
tmap.put(Integer.valueOf(sdf2.format(time)),i);
}
System.out.println("排序后的随机日期数组:");
int i = 0;
for (Map.Entry entry : tmap.entrySet()) {
System.out.print( da_sz[(int) entry.getValue()]+"\t");
if(((i++)+1)%3 == 0) System.out.println();
}
}
}