gpt4 book ai didi

java - 解析和替换 Java 字符串中的 double

转载 作者:行者123 更新时间:2023-12-03 06:22:38 26 4
gpt4 key购买 nike

我正在编写用于转换信号的java代码。如果给定字符串(输入)是:

C*12.387a0d14assc7*18.65d142a

它的翻译(输出)应该是:

C*12387:1000a0d14assc7*1865:100d142a 

算法:

只要字符串中的星号(*)后面有一个包含小数的数字(该字符串中有两个,第一个是“*12.387”,第二个是“*18.65”),该数字将被转换为分数,如下所示上面的例子12.387转换为12387:1000,18.65转换为1865:100

如果小数是孤立的,我可以使用以下代码将其转换为分数:

    double d = 12.387;
String str = Double.toString(d);
String[] fraction = str.split("\\.");

int denominator = (int)Math.pow(10, fraction[1].length());
int numerator = Integer.parseInt(fraction[0] + "" + fraction[1]);

System.out.println(numerator + ":" + denominator);

但我不知道如何将十进制数的子字符串与其包含的字符串分开。作为 java 和编程新手,我需要帮助。感谢期待。

最佳答案

使用正则表达式和捕获组是实现解析的好方法:

String s = "C*12.387a0d14assc7*18.65d142a";
StringBuffer result = new StringBuffer();
Matcher m = Pattern.compile("\\*(\\d+)\\.(\\d+)").matcher(s);
while (m.find()) {
String num = m.group(1);
String denom = m.group(2);
String divisor = "1" + new String(new char[denom.length()]).replace("\0", "0");
String replacement = "*" + num + denom + ":" + divisor;
m.appendReplacement(result, replacement);
}
m.appendTail(result);
System.out.println(result.toString());

关于java - 解析和替换 Java 字符串中的 double ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31532614/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com