数字转罗马数字

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
public static void main(String[] args) {
//键盘录入
Scanner sc = new Scanner(System.in);
String str;
while (true) {
System.out.println("请输入数字:");
str = sc.next();
boolean flag = checkStr(str);
if (flag) {
break;
} else {
System.out.println("不符合规则");
}
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < str.length(); i++) {
char strs = str.charAt(i);
//字符转换位数字
int num = strs - '0';
sb.append(getArr(num));
}
System.out.println(sb);
}

//判断键盘录入是否符合要求
public static boolean checkStr(String str) {
if (str.length() > 9) {
return false;
}
//只能是数字
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if (c < '0' || c > '9') {
return false;
}
}
return true;
}

//定义罗马数组
public static String getArr(int num) {
String[] arr = {"", "Ⅰ", "Ⅱ", "Ⅲ", "Ⅳ", "Ⅴ", "Ⅵ", "Ⅶ", "Ⅷ ", "Ⅸ"};
return arr[num];
}

字符串旋转

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
 public static void main(String[] args) {
//思路先定义两个字符串,比较截取第一个字符和结尾进行拼接
String str1 = "ABNNCS";
String str2 = "NNCSAB";
boolean result=check(str1,str2);
System.out.println(result);

}
public static boolean check(String str1,String str2){
for (int i = 0; i < str1.length(); i++) {
str1=arr(str1);
if(str1.equals(str2)){
return true;
}
}
return false;
}

public static String arr(String str) {
//第一种方法拼接
String first = str.substring(0, 1);
return str.substring(1) + first;
//第二种方法
// char[] Ch=str.toCharArray();
// char first=Ch[0];
// for (int i = 1; i < Ch.length; i++) {
// Ch[i-1]=Ch[i];
// }
// Ch[Ch.length-1]=first;
// String Arr=new String(Ch);
// return Arr;
}

键盘输入任意字符串,打乱里面的内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class Test {
public static void main(String[] args) {
//键盘录入字符串
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个字符串");
String str = sc.next();
//把字符串变成字符数组
char[] arr = str.toCharArray();
//将数组里面的内容打乱
//打乱的核心要素:
//遍历数组得到每一个元素与每一个随机索引处的数据进行交换
Random r = new Random();
for (int i = 0; i < arr.length; i++) {
int index = r.nextInt(arr.length);
char temp = arr[i];
arr[i] = arr[index];
arr[index] = temp;
}
//将字符数组再变回字符串
String newStr = new String(arr);
//输出打印
System.out.println(newStr);
}
}

#生成验证码

内容:可以是小写字母,也可以是大写字母,还可以是数字

规则:长度为5 ,内容中是四位字母,1位数字。其中数字只有1位,但是可以出现在任意的位置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
public class Test {
public static void main(String[] args) {
//1.大写字母和小写字母都放到数组当中
char[] chs = new char[52];
for (int i = 0; i < chs.length; i++) {
//ASCII码表
if(i <= 25){
//添加小写字母
chs[i] = (char)(97 + i);
}else{//27
//添加大写字母
// A --- 65
chs[i] = (char)(65 + i - 26);
}
}
//定义一个字符串类型的变量,用来记录最终的结果
String code = "";
//2.随机抽取4次
//随机抽取数组中的索引
Random r = new Random();
for (int i = 0; i < 4; i++) {
int randomIndex = r.nextInt(chs.length);
//利用随机索引,获取对应的元素
//System.out.println(chs[randomIndex]);
code = code + chs[randomIndex];
}
//System.out.println(result);
//3.随机抽取一个数字0~9
int number = r.nextInt(10);
//生成最终的结果
code = code + number;
//4.变成字符数组打乱数据
char[] arr = code.toCharArray();
//将数组里面的内容打乱
for (int i = 0; i < arr.length; i++) {
int index = r.nextInt(arr.length);
char temp = arr[i];
arr[i] = arr[index];
arr[index] = temp;
}
//将字符数组再变回字符串
String result = new String(arr);
//输出打印
System.out.println(result);
}
}

#请编写程序,由键盘录入一个字符串,统计字符串中英文字母和数字分别有多少个。比如:Hello12345World中字母:10个,数字:5个。

1、键盘录入一个字符串,用 Scanner 实现 2、要统计两种类型的字符个数,需定义两个统计变量,初始值都为0 3、遍历字符串,得到每一个字符 4、判断该字符属于哪种类型,然后对应类型的统计变量+1.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
//键盘录入一个字符串,用 Scanner 实现
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个字符串:");
String line = sc.nextLine();
// 为方便统计,将字符串中的字母都转为小写
line = line.toLowerCase();
//要统计两种类型的字符个数,需定义两个统计变量,初始值都为0
int letterCount = 0;
int numberCount = 0;
// 遍历字符串,得到每一个字符
for(int i=0; i<line.length(); i++) {
char ch = line.charAt(i);
// 判断该字符属于哪种类型,然后对应类型的统计变量+1
if (ch >= 'a' && ch <= 'z') {
letterCount++;
} else if (ch >= '0' && ch <= '9') {
numberCount++;
}
}
//输出两种类型的字符个数
System.out.println("英文字母:" + letterCount + "个");
System.out.println("数字:" + numberCount + "个");
}
}

请定义一个方法用于判断一个字符串是否是对称的字符串,并在主方法中测试方法。例如:“abcba”、”上海自来水来自海上”均为对称字符串。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class Test {
public static void main(String[] args) {
String str = "上海自来水来自海上";
System.out.println(isSym(str));
}

public static boolean isSym(String str) {
// 为了程序的健壮,如果传递的是空值,返回false
if (str == null) {
return false;
}
// 转换为StringBuilder
StringBuilder sb = new StringBuilder(str);
// 反转,再转成String
String reStr = sb.reverse().toString();
// 比较与原字符串是否相等
// 相等返回true,不相等返回false,正好与equals的返回值一致,直接返回即可。
return reStr.equals(str);
}
}

我国的居民身份证号码,由由十七位数字本体码和一位数字校验码组成。请定义方法判断用户输入的身份证号码是否合法,并在主方法中调用方法测试结果。规则为:号码为18位,不能以数字0开头,前17位只可以是数字,最后一位可以是数字或者大写字母X。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入身份证号:");
String id = sc.nextLine();
System.out.println(check(id));
}
// 返回值boolean类型,表示是否符合规则。参数列表:需要判断的字符串
public static boolean check(String id) {
// 如果传递了空参数,返回false
if (id == null) {
return false;
}
// 如果是数字0开头,返回false
if (id.startsWith("0")) {
return false;
}
// 如果不是18位,返回false
if (id.length() != 18) {
return false;
}
// 遍历判断每一位
for (int i = 0; i < id.length(); i++) {
char ch = id.charAt(i);
// 前17位都是数字,最后一位可以是数字或者大写字母X
if (i == id.length() - 1) { // 最后一位
if (ch < '0' || ch > '9' && ch != 'X') { // 不是数字或者X
return false;
}
} else { // 其他位
if (ch < '0' || ch > '9') { // 不是数字
return false;
}
}
}
// 所有的规则都符合,返回true
return true;
}
}