标识符的命名规则如下:
1、可以使用数字、字母、下划线、美元符号($)。
2、不能以数字开头。
3、不能包含空格。
4、不能使用关键字和保留字,但是可以包含关键字和保留字。
5、java严格区分大小写,但是长度无限制。
标识符的常见命名约定
一、小驼峰式命名法:(方法、变量)
约定1:标识符是一个单词的时候,首字母小写。
示例1:name。
约定2:标识符由多个单词组成的时候,第一个单词首字母小写,其他单词首字母大写。
示例2:firstName。
二、大驼峰式命名法:(类)
约定1:标识符是一个单词的时候,首字母大写。
示例1:Students。
约定2:标识符由多个单词组成的时候,第一个单词首字母小写,其他单词首字母大写。
示例2:GoodStudents。
java提供了upper和lower方法来进行字母大小写的转换,实例如下:
//把一个字符串中的大写转为小写,小写转换为大写:思路1
public static String exChange(String str){
StringBuffer sb = new StringBuffer()
if(str!=null){
for(int i=0i<str.length()i++){
char c = str.charAt(i)
if(Character.isUpperCase(c)){
sb.append(Character.toLowerCase(c))
}else if(Character.isLowerCase(c)){
sb.append(Character.toUpperCase(c))
}
}
}
return sb.toString()
}
//把一个字符串中的大写转为小写,小写转换为大写:思路2
public static String exChange2(String str){
for(int i=0i<str.length()i++){
//如果是小写
if(str.substring(i, i+1).equals(str.substring(i, i+1).toLowerCase())){
str.substring(i, i+1).toUpperCase()
}else{
str.substring(i, i+1).toLowerCase()
}
}
return str
}
Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
Java编程语言的风格十分接近C语言、C++语言。Java是一个纯粹的面向对象的程序设计语言,它继承了C++语言面向对象技术的核心。Java舍弃了C语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)、多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。
Java不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的性能。
import org.apache.commons.lang3.StringUtils
/**
* @Title: ConvertUpMoney
* @Description: 将数字金额转换为大写中文金额
* @date: 2019年6月18日 下午10:52:27
*/
public class ConvertUpMoney {
// 大写数字
private static final String[] NUMBERS = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"}
// 整数部分的单位
private static final String[] IUNIT = {"元","拾","佰","仟","万","拾","佰","仟","亿","拾","佰","仟","万","拾","佰","仟"}
// 小数部分的单位
private static final String[] DUNIT = {"角","分","厘"}
/**
* 转换为大写的中文金额
* @param str 字符串类型的 金额数字
* @return
*/
public static String toChinese(String str) {
// 判断输入的金额字符串是否符合要求
if (StringUtils.isBlank(str) || !str.matches("(-)?[\\d]*(.)?[\\d]*")) {
return "抱歉,请输入数字!"
}
if("0".equals(str) || "0.00".equals(str) || "0.0".equals(str)) {
return "零元"
}
// 判断金额数字中是否存在负号"-"
boolean flag = false
if(str.startsWith("-")){
// 标志位,标志此金额数字为负数
flag = true
str = str.replaceAll("-", "")
}
// 去掉金额数字中的逗号","
str = str.replaceAll(",", "")
String integerStr//整数部分数字
String decimalStr//小数部分数字
// 初始化:分离整数部分和小数部分
if(str.indexOf(".")>0) {
integerStr = str.substring(0,str.indexOf("."))
decimalStr = str.substring(str.indexOf(".") + 1)
}else if(str.indexOf(".")==0) {
integerStr = ""
decimalStr = str.substring(1)
}else {
integerStr = str
decimalStr = ""
}
// beyond超出计算能力,直接返回
if(integerStr.length()>IUNIT.length) {
return "超出计算能力!"
}
// 整数部分数字
int[] integers = toIntArray(integerStr)
// 判断整数部分是否存在输入012的情况
if (integers.length>1 &&integers[0] == 0) {
return "抱歉,输入数字不符合要求!"
}
// 设置万单位
boolean isWan = isWan5(integerStr)
// 小数部分数字
int[] decimals = toIntArray(decimalStr)
// 返回最终的大写金额
String result = getChineseInteger(integers, isWan) + getChineseDecimal(decimals)
if(flag){
// 如果是负数,加上"负"
return "负" + result
}else{
return result
}
}
/**
* 将字符串转为int数组
* @param number 数字
* @return
*/
private static int[] toIntArray(String number) {
int[] array = new int[number.length()]
for(int i = 0i<number.length()i++) {
array[i] = Integer.parseInt(number.substring(i,i+1))
}
return array
}
/**
* 将整数部分转为大写的金额
* @param integers 整数部分数字
* @param isWan 整数部分是否已经是达到【万】
* @return
*/
public static String getChineseInteger(int[] integers,boolean isWan) {
StringBuffer chineseInteger = new StringBuffer("")
int length = integers.length
if (length == 1 &&integers[0] == 0) {
return ""
}
for(int i=0i<lengthi++) {
String key = ""
if(integers[i] == 0) {
if((length - i) == 13)//万(亿)
key = IUNIT[4]
else if((length - i) == 9) {//亿
key = IUNIT[8]
}else if((length - i) == 5 &&isWan) {//万
key = IUNIT[4]
}else if((length - i) == 1) {//元
key = IUNIT[0]
}
if((length - i)>1 &&integers[i+1]!=0) {
key += NUMBERS[0]
}
}
chineseInteger.append(integers[i]==0?key:(NUMBERS[integers[i]]+IUNIT[length - i -1]))
}
return chineseInteger.toString()
}
/**
* 将小数部分转为大写的金额
* @param decimals 小数部分的数字
* @return
*/
private static String getChineseDecimal(int[] decimals) {
StringBuffer chineseDecimal = new StringBuffer("")
for(int i = 0i<decimals.lengthi++) {
if(i == 3) {
break
}
chineseDecimal.append(decimals[i]==0?"":(NUMBERS[decimals[i]]+DUNIT[i]))
}
return chineseDecimal.toString()
}
/**
* 判断当前整数部分是否已经是达到【万】
* @param integerStr 整数部分数字
* @return
*/
private static boolean isWan5(String integerStr) {
int length = integerStr.length()
if(length >4) {
String subInteger = ""
if(length >8) {
subInteger = integerStr.substring(length- 8,length -4)
}else {
subInteger = integerStr.substring(0,length - 4)
}
return Integer.parseInt(subInteger) >0
}else {
return false
}
}
// Test
public static void main(String[] args) {
String number = "12.56"
System.out.println(number+": "+ConvertUpMoney.toChinese(number))
number = "1234567890563886.123"
System.out.println(number+": "+ConvertUpMoney.toChinese(number))
number = "1600"
System.out.println(number+": "+ConvertUpMoney.toChinese(number))
number = "156,0"
System.out.println(number+": "+ConvertUpMoney.toChinese(number))
number = "-156,0"
System.out.println(number+": "+ConvertUpMoney.toChinese(number))
number = "0.12"
System.out.println(number+": "+ConvertUpMoney.toChinese(number))
number = "0.0"
System.out.println(number+": "+ConvertUpMoney.toChinese(number))
number = "01.12"
System.out.println(number+": "+ConvertUpMoney.toChinese(number))
number = "0125"
System.out.println(number+": "+ConvertUpMoney.toChinese(number))
number = "-0125"
System.out.println(number+": "+ConvertUpMoney.toChinese(number))
number = "sdw5655"
System.out.println(number+": "+ConvertUpMoney.toChinese(number))
System.out.println(null+": "+ConvertUpMoney.toChinese(null))
}
}