1.转换罗马数字
需求:
键盘录入字符串
要求1:长度小于等于9
要求2:只能是数字 将内容变成罗马数字
下面是阿拉伯数字和罗马数字的对比关系 1-Ⅰ、2-Ⅱ、3-Ⅲ、4-Ⅳ、5-Ⅴ、6-Ⅵ、7-Ⅶ、8-Ⅷ、9-Ⅸ
注意点罗马数字没有0,用“ ”(长度为0的字符串)代替。
package com.zjc.test;
import java.util.Scanner;
import java.util.StringJoiner;
public class Test1 {
public static void main(String[] args) {
//1.录入字符串
Scanner sc = new Scanner(System.in);
System.out.println("请输入字符串:");
String s;
while (true){
s = sc.next();
//2.检验录入字符串是否合格
boolean flag = Check(s);
if(flag){
System.out.println("输入成功!");
break;
}else {
System.out.println("不符合要求,重新输入");
continue;
}
}
//3.转换罗马数字
StringBuilder sb =new StringBuilder();
for (int i = 0; i < s.length(); i++) {
int number = s.charAt(i) - 48;
sb.append(Change(number));
}
System.out.println(sb.toString());
}
public static boolean Check(String s){
//判断长度是否符合要求
if(s.length() > 9){
return false;
}
//判断内容是否符合要求
for (int i = 0; i < s.length()-1; i++) {
char c = s.charAt(i);
if(c < '0'|| c > '9'){
return false;
}
}
return true;
}
public static String Change(int number){
String[] str = {"","Ⅰ","Ⅱ","Ⅲ","Ⅳ","Ⅴ","Ⅵ","Ⅶ","Ⅷ","Ⅸ"};
return str[number];
}
}
除了查表法(上代码中Change方法),还可以用switch实现。
public static String Change(char c){
String str;
switch(c){
case '1' -> str = "Ⅰ";
case '2' -> str = "Ⅱ";
case '3' -> str = "Ⅲ";
case '4' -> str = "Ⅳ";
case '5' -> str = "Ⅴ";
case '6' -> str = "Ⅵ";
case '7' -> str = "Ⅶ";
case '8' -> str = "Ⅷ";
case '9' -> str = "Ⅸ";
default -> str = "";
}
return str;
}
JDK12中switch还可以这样实现。
public static String Change(char c){
String str = switch(c){
case '1' -> "Ⅰ";
case '2' -> "Ⅱ";
case '3' -> "Ⅲ";
case '4' -> "Ⅳ";
case '5' -> "Ⅴ";
case '6' -> "Ⅵ";
case '7' -> "Ⅶ";
case '8' -> "Ⅷ";
case '9' -> "Ⅸ";
default -> "";
};
return str;
}
2.旋转匹配字符串
需求:
给定两个字符串,A和B; A的旋转操作就是将A最左边的字符移动到最右边。
例如,若A = 'abced',移动一次结果就是'bcdea';
如果在经过若干次调整之后,A能变成B,那么返回true;
否则返回false;
package com.zjc.test;
public class Test3 {
public static void main(String[] args) {
//1.定义两个字符串
String strA = "abcdef";
String strB = "defac";
//
if(check(strA,strB)){
System.out.println("匹配成功!");
}else {
System.out.println("匹配失败!");
}
}
//2.定义旋转方法
public static String rotateOne(String strA) {
//用substring方法截取
String first = strA.substring(0,1);
String end = strA.substring(1,strA.length());
return end + first;
}
public static String rotateTwo(String strA) {
//将String字符串变成字符串数组,然后旋转。
char[] arr = strA.toCharArray();
char c = arr[0];
for (int i = 1; i < arr.length; i++) {
arr[i-1] = arr[i];
}
arr[arr.length-1] = c;
String str = new String(arr);
return str;
}
//3.定义匹配方法
public static boolean check(String strA,String strB){
//strA经过长度值次数的循环后变为原值,所以旋转次数为长度值。
for (int i = 0; i < strA.length(); i++) {
strA = rotateTwo(strA);
if(strA.equals(strB)){
return true;
}
}
return false;
}
}
代码中旋转方法有两个
rotateOne:使用了substring的方法截取拼接完成。
rotateTwo:将字符串转换成字符数组,然后数组内部调整实现,在这个方法中,曾出现错误,试图将字符数组用tostring方法转成字符串,操作错误,应该创建字符串对象,将字符数组添加到字符串对象中去来实现字符数组到字符串的转化。例:String str = new String(arr)(其中arr是字符数组)。