我正在创建一个英尺和英寸的计算器。我希望用户能够以各种方式输入信息,比如1'-4-5/8"或1 4 5/8。
在执行数学运算时,上述数字必须转换为小数(1'-4-5/8“是小数英寸中的16.625 )。最后的结果将是以十进制英寸为单位,或者再转换为英尺和英寸。
我将如何解析体系结构度量并将其转换为十进制?
任何帮助都将不胜感激!
谢谢!
编辑:在经历了太多的时间和尝试了很多不同的事情之后,我想我得到了一些有用的东西。我最终将限制用户输入长度的方式,因此我认为下面的内容是可行的。它可能不是优化的,但它是我现在能得到的最好的。
public class delim_test_cases {
public static void main(String[] args) {
double inches = 0;
double feet = 0;
double fract = 0;
String str = "2'-3-7/8";
String[] TempStr;
String delimiter = ("[-]+");
TempStr = str.split(delimiter);
for(int i=0; i< TempStr.length ; i++ ) {
for(int z=0; z< TempStr[i].length() ; z++ ) {
if (TempStr[i].charAt(z) == '\'') {
String[] FeetStr;
String feetdelim = ("[\']+");
FeetStr = TempStr[i].split(feetdelim);
feet = Integer.parseInt(FeetStr[0]);
}
else if (TempStr[i].charAt(z) == '/') {
String[] FracStr;
String fracdelim = ("[/]+");
FracStr = TempStr[i].split(fracdelim);
double numer = Integer.parseInt(FracStr[0]);
double denom = Integer.parseInt(FracStr[1]);
fract = numer/denom;
}
else if (TempStr[i].indexOf("\'")==-1 && TempStr[i].indexOf("/")==-1) {
String inchStr;
inchStr = TempStr[i];
inches = Integer.parseInt(inchStr);
}
}
}
double answer = ((feet*12)+inches+fract);
System.out.println(feet);
System.out.println(inches);
System.out.println(fract);
System.out.println(answer);
}
}发布于 2011-07-24 19:46:08
为什么不直接在'-‘或空格上拆分,那么您就有了一个可能包含3个字符串的数组。
所以,你看最后一个字符,如果它是一个单引号,然后乘以12。
如果一个双引号,然后除以'/‘,然后计算分数,对于一个既不是这两个数字,它就是1英寸,把它加到总数中。
这样你就不会假设顺序,或者如果你有分数英寸的话。
只需循环遍历数组,然后遍历上面的算法,所以如果有人这样做了
3'-4'-4/2",然后您可以轻松地计算它。
更新:
我将根据OP的注释添加代码。
您可能需要参考这一点,以获得更多关于split的想法。
http://www.java-examples.com/java-string-split-example
但是,基本上,只需这样做(没有测试,只是写出了):
public double convertArchToDecimal(String instr, String delimiter) {
String[] s = instr.split(delimiter);
int ret = 0;
for(int t = 0; t < s.length; t++) {
char c = s[t].charAt(s[t] - length);
switch(c) {
case '\'': //escape single quote
String b = s[t].substring(0, s[t].length - 1).split("/");
try {
ret += Integer.parse(s[t].trim()) * 12;
} catch(Exception e) { // Should just need to catch if the parse throws an error
}
break;
case '"': // may need to escape the double quote
String b = s[t].substring(0, s[t].length - 1).split("/");
int f = 0;
int g = 0;
try {
f = Integer.parse(b[0]);
g = Integer.parse(b[1]);
ret += f/g;
} catch(Exception e) {
}
break;
default:
try {
ret += Integer.parse(s[t].trim());
} catch(Exception e) { // Should just need to catch if the parse throws an error
}
break;
}
}
return ret;
}我捕获的异常比所需的更多,您可能希望比我更多地使用trim()方法,在解析之前去掉空白,例如,防止3 / 5 "。
通过通过一个空间或破折号,它应该足以满足你的需要。
您也可能想要舍入一些重要的数字,否则舍入以后可能会给您带来问题。
https://stackoverflow.com/questions/6809084
复制相似问题