String相关练习2&&p108-110
对称字符串
之前写过类似的,不过这次是要用StringBuilder里面的一些方法来实现,比之前方便很多
这里还是两道题合成一道题来写了,改进了一下,第二个练习用到了StringJoiner类,但是在JDK api1.6中无法查到,大家注意一下
import java.util.Scanner;
import java.util.StringJoiner;
public class StringBuilderDemo {
public static void main(String[] args) {
while(true) {
String str = getString();
StringBuilder sb = new StringBuilder();
String str1 = sb.append(str).reverse().toString();
if (str.equals(str1)) {
System.out.println("该字符串为对称字符串");
} else {
System.out.println("该字符串不是对称字符串");
}
String[] arr = getStringArr(str);
StringJoiner sj = new StringJoiner(", ", "[", "]");
for (int i = 0; i < arr.length; i++) {
sj.add(arr[i]);
}
System.out.println(sj);
}
}
//键盘录入字符串
public static String getString() {
System.out.println("请输入一个字符串:");
Scanner sc = new Scanner(System.in);
String str = sc.next();
return str;
}
//将字符串转换为数组
public static String[] getStringArr(String str) {
String[] arr = new String[str.length()];
for (int i = 0; i < str.length(); i++) {
arr[i] = str.charAt(i) + "";
}
return arr;
}
}
转换罗马数字
写法一
package test6;
import java.util.Scanner;
public class replaceRome {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
String str;
while (true) {
str = getString();
boolean flag = checkString(str);
if (flag) {
break;
} else {
System.out.println("当前字符串不符合要求,请重新输入");
continue;
}
}
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
int number = c - 48;
String str1 = getRomeNumber(number);
sb.append(str1);
}
System.out.println(sb);
}
//键盘录入数字
public static String getString() {
System.out.println("请输入你想转换的数字:");
Scanner sc = new Scanner(System.in);
String number = sc.next();
return number;
}
//转换为罗马数字
public static String getRomeNumber(int number) {
String[] romeNumber = {"", "Ⅰ", "Ⅱ", "Ⅲ", "Ⅳ", "Ⅴ", "Ⅵ", "Ⅶ", "Ⅷ", "Ⅸ"};
return romeNumber[number];
}
//检查输入字符是否满足
//1.长度小于等于9
//2.只能是数字
public static boolean checkString(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;
}
}
写法二
第二种写法是将getRomeNumber方法用which进行改进,但是我这里版本不够,我就只截一下不同的地方,大家可以自己去试试第二种方法
第三张图可以看我报错了,我的JDK是jdk-12.0.2,我搜了一下大于等于jdk14的应该可以
调整字符串
第二种方法是先将字符串转换为数组,然后再进行索引进行转换
写法一
package test6;
import java.util.Scanner;
public class rotateString {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("输入需要转换的字符串");
String str = sc.next();
System.out.println("输入对比的字符串");
String str1 = sc.next();
if (str.length() == str1.length()) {
System.out.println(checkStr(str,str1));
}else{
System.out.println("两字符串长度不同,请重新输入");
}
}
}
//判断多次移动后是否相等,相等返回true,不相等返回false
public static boolean checkStr(String str, String str1) {
for (int i = 0; i < str.length(); i++) {
str = rotate(str);
if (str.equals(str1)) {
return true;
}
}
return false;
}
//移动字符串,将最左侧字符移到最右侧;例如:abcde->bcdea
public static String rotate(String str) {
char first = str.charAt(0);
String end = str.substring(1);
String result = end + first;
return result;
}
}
写法二
package test6;
import java.util.Scanner;
public class rotateString {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("输入需要转换的字符串");
String str = sc.next();
System.out.println("输入对比的字符串");
String str1 = sc.next();
if (str.length() == str1.length()) {
System.out.println(checkStr(str,str1));
}else{
System.out.println("两字符串长度不同,请重新输入");
}
}
}
//判断多次移动后是否相等,相等返回true,不相等返回false
public static boolean checkStr(String str, String str1) {
for (int i = 0; i < str.length(); i++) {
str = rotateArr(str);
if (str.equals(str1)) {
return true;
}
}
return false;
}
//先将字符串转化为字符数组,然后移动索引。
public static String rotateArr(String str){
char[] arr = str.toCharArray();
char first = arr[0];
for (int i = 1; i < arr.length; i++) {
arr[i-1]= arr[i];
}
arr[arr.length - 1] = first;
//利用字符数组创建一个字符串对象
String result = new String(arr);
return result;
}
}
打乱字符串
package test6;
/*
/键盘录入字符串,打乱它的顺序
*/
import java.util.Random;
import java.util.Scanner;
public class disturbanceString {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("请输入你想打乱的字符串:");
String str = sc.next();
System.out.println("打乱后为: \n" + disturbanceStr(str));
}
}
public static String disturbanceStr(String str) {
char[] arr = str.toCharArray();
Random ra = new Random();
for (int i = 0; i < arr.length; i++) {
int number = ra.nextInt(arr.length);
char tmp = arr[i];//定义记录初始a
arr[i] = arr[number];//arr[number]赋给arr[i]
arr[number] = tmp;//tmp赋给arr[number]
}
String result = new String(arr);
return result;
}
}
生成验证码
package test6;
/*
内容:可以是小写字母,也可以是大写字母,还可以是数字
规则:
长度为5
内容中是四位字母,1位数字。
其中数字只有1位,但是可以出现在任意的位置。
*/
import java.util.Random;
public class identifying {
public static void main(String[] args) {
char[] arr = new char[52];
String result = "";
Random rd = new Random();
//数组中随机抽取4个字母
for (int i = 0; i < 4; i++) {
int index = rd.nextInt(52);
result = result + getArr(arr)[index];
}
int number = rd.nextInt(10);
result = result + number;
System.out.println(disturbanceStr(result));
}
//大写字母和小写字母都保存到数组当中
public static char[] getArr(char[] arr) {
for (int i = 0; i < arr.length; i++) {
if (i <= 25) {
arr[i] = (char) (97 + i);
} else {
arr[i] = (char) (65 + i - 26);
}
}
return arr;
}
public static String disturbanceStr(String str) {
char[] arr = str.toCharArray();
Random ra = new Random();
for (int i = 0; i < arr.length; i++) {
int number = ra.nextInt(arr.length);
char tmp = arr[i];//定义记录初始a
arr[i] = arr[number];//arr[number]赋给arr[i]
arr[number] = tmp;//tmp赋给arr[number]
}
String result = new String(arr);
return result;
}
}
字符相乘
package test6;
/*
给定两个以字符串形式表示的非负整数num1和num2,返回num1和num2的乘积,他们的乘积也表示为字符串形式
注意:用已知知识完成
*/
public class multiplicationStr {
public static void main(String[] args) {
String num1 = "123";
String num2 = "12323";
int number1 = getWholeNumber(num1);
int number2 = getWholeNumber(num2);
int result = number1 * number2;
String result1 = result + "";
System.out.println("运算结果为: " + result1);
}
//将字符串转化为数字String->int
public static int getInt(int number) {
int[] arr = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
return arr[number];
}
//将单个数字转化成整个数字,例如1 2 3 -> 123
public static int getWholeNumber(String str) {
int result = 0;
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
int index = c - 48;
int number1 = getInt(index);
result = result * 10 + number1;
}
return result;
}
}
最后一题
这道题没题目,就是一个倒着遍历的方法,遇到空格遍历停止即可。
public class p110last {
public static void main(String[] args) {
String str = "Hello World is good";
int count = 0;
//倒叙遍历,遇到空格结束循环
for (int i = str.length() - 1; i > 0; i--) {
char c = str.charAt(i);
int index = c - 32;
if (index == 0) {
break;
} else {
count++;
}
}
System.out.println(count);
}
}
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 doathuwant!