Java -- 위안 화 (RMB) 소문 자/숫자 변환 대문자 도구 클래스
5133 단어 Java공구.RMB인민폐디지털 도구 클래스
/**
* ,
* @param money
* @return String
* @throws Exception
*/
public static String toRMBUpper(String money) throws Exception {
boolean lessZero = false;
//When money is scientific notation
if (money.contains("E")){
BigDecimal bg = new BigDecimal(Double.valueOf(money));
money = bg.toPlainString();
}
if(money.startsWith("-")) {
money = money.substring(1);
lessZero = true;
}
if (!money.matches("^[0-9]*$|^0+\\.[0-9]+$|^[1-9]+[0-9]*$|^[1-9]+[0-9]*.[0-9]+$")) {
throw new Exception(" !");
}
String[] part = money.split("\\.");
String integerData = part[0];
String decimalData = part.length > 1 ? part[1] : "";
//Replace front 0
if(integerData.matches("^0+$"))
{
integerData = "0";
}else if(integerData.matches("^0+(\\d+)$")){
integerData = integerData.replaceAll("^0+(\\d+)$", "$1");
}
StringBuffer integer = new StringBuffer();
for (int i = 0; i < integerData.length(); i++) {
char perchar = integerData.charAt(i);
integer.append(upperNumber(perchar));
integer.append(upperNumber(integerData.length() - i - 1));
}
StringBuffer decimal = new StringBuffer();
if (part.length > 1 && !"00".equals(decimalData)) {
int length = decimalData.length() >= 2 ? 2 : decimalData.length();
for (int i = 0; i < length; i++) {
char perchar = decimalData.charAt(i);
decimal.append(upperNumber(perchar));
if (i == 0)
decimal.append(' ');
if (i == 1)
decimal.append(' ');
}
}
String result = integer.toString() + decimal.toString();
result = dispose(result);
if(lessZero && !" ".equals(result)) {
result = " " + result;
}
return result;
}
private static char upperNumber(char number) {
switch (number) {
case '0':
return ' ';
case '1':
return ' ';
case '2':
return ' ';
case '3':
return ' ';
case '4':
return ' ';
case '5':
return ' ';
case '6':
return ' ';
case '7':
return ' ';
case '8':
return ' ';
case '9':
return ' ';
}
return '0';
}
private static char upperNumber(int index) {
int realIndex = index % 9;
if(index > 8) {
realIndex = (index - 9) % 8;
realIndex = realIndex + 1;
}
switch (realIndex) {
case 0:
return ' ';
case 1:
return ' ';
case 2:
return ' ';
case 3:
return ' ';
case 4:
return ' ';
case 5:
return ' ';
case 6:
return ' ';
case 7:
return ' ';
case 8:
return ' ';
}
return '0';
}
private static String dispose(String result) {
result = result.replaceAll("0", "");
result = result.replaceAll(" | | | | | ", " ");
result = result.replaceAll(" +", " ").replace(" ", " ");
result = result.matches("^.* [^ ] .*$") ? result.replace(" ", " ") : result.replace(" ", " ");
result = result.replace(" ", " ");
//Processing decimals
result = result.replace(" ", " ").replace(" ", "");
result = result.replaceAll("(^[ ]*)(.+$)", "$2");
result = result.replaceAll("(^.*)([ ]+ )(.+$)", "$1 $3");
//Processing integer
result = result.replaceAll(" | $| $|^ $| $| $| $", " ");
result = result.replaceAll("^ $", " ");
return result;
}
public static void main(String[] args) throws Exception {
//Test
System.out.println(toRMBUpper("9999999999.0"));
//Out:
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.