键盘录入的两套体系不能混用
//键盘录入 第一套体系
// 遇到空格 制表符回车就停止接受 这些符合后面的数据就不会接受了
//nextInt();接受整数
//nextDouble();接受小数
//next();接受字符串
//第二套体系
// 可以接受空格,制表符,遇到回车才停止接受数据
//nextLine();
先用nextInt,再用nextLine会导致下面的nextLine接受不到数据
String
1、==号比较
基本数据类型:比的是数据值
引用数据类型:比的是地址值
比较字符串对象的内容是否相等:equals
比较字符串对象的内容是否相等,忽略大小写:equalsIgnoreCase
案例金额转换
package Tests;
import java.util.Scanner;
public class test07 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int money;
//1、输入数据
while (true) {
System.out.println("请输入一个数字:");
money = sc.nextInt();
if (money >= 0 && money <= 9999999) {
break;
} else {
System.out.println("金额无效");
}
}
//2、获得金额每个位数的数字
String moneySr = "";
while (money != 0) {
int ge = money % 10;
//moneySr+=getCapitalNumber(ge);
moneySr = getCapitalNumber(ge) + moneySr;
money = money / 10;
}
System.out.println(moneySr);
//3、如果没有满7位数 添加零充位
int count = 7 - moneySr.length();
for (int i = 0; i < count; i++) {
moneySr = "零" + moneySr;
}
System.out.println(moneySr);
//4、添加单位
String[] danwei = {"百", "十", "万", "千", "百", "十", "元"};
String res = "";
for (int i = 0; i < moneySr.length(); i++) {
res = res + moneySr.charAt(i) + danwei[i];
}
System.out.println(res);
}
public static String getCapitalNumber(int number) {
//定义数组 使得数字与大写的中文产生一个对应关系
String[] arr = {"零", "一", "二", "三", "四", "五", "六", "七", "八"};
return arr[number];
}
}
StringBuilder
StringBuilder可以看成一个容器,创建之后里面的内容是可变的。
因为StringBuilder是java已经写好的类,java在底层对他做了一些处理,所以打印对象不是地址值而是属性值。
使用StringBuilder的场景:字符串的拼接和反转。
StringJoiner
和StringBuilder一样,可以看成一个容器,创建之后里面的内容是可变的。
可以提高字符串的操作效率,Jdk8出现的
方法名 | 说明 |
public StringJoiner(间隔符号) | 创建一个StringJoiner对象,指定拼接时的间隔符号 |
public StringJoiner(间隔符号,开始符号,结束符号) | 创建一个StringJoiner对象,指定拼接时的间隔符号、开始符号、结束符号 |
string、StringBuilder、StringJoiner总结
字符串原理
字符串存储的内存原理 | 1、直接赋值会复用字符串常量池中的 2、new出来不会复用,而是开辟新空间 |
==号比较的到底是啥 | 1、基本数据类型比较数据值 2、引用数据类型比较地址值 |
字符串拼接的底层原理 | 1、如果没有变量参与,都是字符串直接相加,编译之后就是拼接之后的结果,会复用串池里的字符串。 2、如果有变量参与,每一行拼接的代码,都会在内存中创建新的字符串,浪费内存 |
StringBbuilder提高效率原理 | 所以要拼接的内容都会往StringBuilder中放,不会创建很多无用的空间,节约内存。 |
案例转换罗马数字
package Tests;
import java.util.Scanner;
public class test08 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个长度小于等于9且只有数字的字符串:");
String str = sc.next();
//判断是否满足要求
while(true){
if(checkStr(str)){
//转换为罗马数字
break;
}else{
System.out.println("输入的字符串不符合要求,请重新输入:");
continue;
}
}
//输出转换后的字符串
StringBuilder sb = new StringBuilder();
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
int number = c -48;
sb.append( changeLuoma(number)).append(",");
}
String sbStr = sb.toString();
System.out.println(sbStr);
}
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 changeLuoma(int number){
String[] arr = {"","I","II","III","IV","V","VI","VII","VIII","IX"};
return arr[number];
}
}
changeLuoma可以用switch实现,如下
package Tests;
import java.util.Scanner;
public class test08 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个长度小于等于9且只有数字的字符串:");
String str = sc.next();
//判断是否满足要求
while(true){
if(checkStr(str)){
//转换为罗马数字
break;
}else{
System.out.println("输入的字符串不符合要求,请重新输入:");
continue;
}
}
//输出转换后的字符串
StringBuilder sb = new StringBuilder();
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
//int number = c -48;
sb.append( changeLuoma(c)).append(",");
}
String sbStr = sb.toString();
System.out.println(sbStr);
}
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 changeLuoma(char number){
// String[] arr = {"","I","II","III","IV","V","VI","VII","VIII","IX"};
// return arr[number];
String str;
switch(number){
case '0':
str ="";
break;
case '1':
str ="I";
break;
case '2':
str ="II";
break;
case '3':
str ="III";
break;
case '4':
str ="IV";
break;
case '5':
str ="V";
break;
case '6':
str ="VI";
break;
case '7':
str ="VII";
break;
case '8':
str ="VIII";
break;
case '9':
str ="IX";
break;
default:
str= "";
break;
}
return str;
}
}