1、從字元串中篩選元素列印
import java.util.Scanner;
/*
從控制台讀取字元串,然後把字元串轉換為字元數組
篩選出控制台讀取到的字元串中的大寫字母和數字,并列印出來
*/
public class PrintElement {
public static void main(String[] args) {
//通過Scanner的nextLine()方法從控制台讀取一行字元串
Scanner input=new Scanner(System.in);
String s=input.nextLine();
//将字元串轉換為字元數組
char[] arr=s.toCharArray();
//列印字元數組中的大寫字母和數字
for(char c:arr){
if(Character.isUpperCase(c)||Character.isDigit(c)){
System.out.print(c);
}
}
}
}
2、随機初始化字元串、字元串數組排序
/*
建立一個長度是8的字元串數組,使用8個長度是5的随機字元串初始化這個數組;
随機字元有可能是數字,大寫字母或者小寫字母;
對這個數組進行排序,按照每個字元串的首字母排序(無視大小寫)
*/
public class StringTest {
public static void main(String[] args) {
//建立長度為8的字元串數組,每個字元串長度是5
int arrLen=8;
int strLen=5;
String[] str=getStringArray(arrLen,strLen);
printStringArray(str);
//對字元串數組進行排序
stringArraySort(str);
printStringArray(str);
}
//生成一個儲存所有數字、大小寫字母的字元串
//char[] list="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
//直接這樣是不是更好
public static String strList(){
StringBuilder s=new StringBuilder();
//添加1~9
for(char c='0';c<='9';c++){
s.append(c);
}
//添加'a'~'z'
for(char c='a';c<='z';c++){
s.append(c);
}
//添加'A'~'Z'
for(char c='A';c<='Z';c++){
s.append(c);
}
return s.toString();
}
//生成指定長度的随機字元串
public static String getString(int length){
String str=strList();//儲存數字、大小寫字母的字元串
//System.out.println(str);測試程式
int strLength=str.length();
//生成長度為length的字元數組
char[] ch=new char[length];
for(int i=0;i<length;i++){
int j=(int)(Math.random()*strLength);
ch[i]=str.charAt(j);
}
return String.valueOf(ch);
}
//建立指定長度m的字元串數組,并進行随機初始化,每個字元串長度n
public static String[] getStringArray(int m,int n){
String[] str=new String[m];
for(int i=0;i<m;i++){
str[i]=getString(n);
}
return str;
}
//對字元串數組進行排序,無視大小寫,選擇排序
public static void stringArraySort(String[] str){
for(int i=0;i<str.length-1;i++){
for(int j=i+1;j<str.length;j++){
if(str[i].compareToIgnoreCase(str[j])>0){
String temp=str[i];
str[i]=str[j];
str[j]=temp;
}
}
}
}
//列印字元串數組
public static void printStringArray(String[] str){
System.out.print("{"+str[0]);
for(int i=1;i<str.length;i++){
System.out.print(", "+str[i]);
}
System.out.println("}");
}
}
3、窮舉法破解密碼
/*
1. 生成一個長度是3的随機字元串,把這個字元串作為當做密碼
2. 使用窮舉法生成長度是3個字元串,比對上述生成的密碼
要求:分别使用多層for循環和遞歸解決上述問題
*/
public class Decode {
public static void main(String[] args) {
//生成長度是3的随機字元串,假設僅含有數字和大小寫字母
//用StringTest中的getString方法
String password=StringTest.getString(3);
System.out.println("password=\""+password+"\"");
String decode=decode1(password);
System.out.println("decode=\""+decode+"\"");
}
//使用多層for循環解密
//為什麼要多層循環呢?是不是密碼字元串不能轉變為字元數組?然後就可以一位一位判斷了
public static String decode1(String password){
//list儲存密碼中所有可能的字元,調用StringTest中的strList方法
char[] list=(StringTest.strList()).toCharArray();
int len=list.length;
for(int i=0;i<len;i++){
for(int j=0;j<len;j++){
for(int k=0;k<len;k++){
char[] ch={list[i],list[j],list[k]};
String decode=new String(ch);
if(decode.equals(password))
return decode;
}
}
}
return null;
}
//遞歸還沒想通^_^
}