我希望执行的操作是:
String "32.63578..."
为:
float 32.63
long 578... //where '...' is rest of string
Python中的以下内容:
split = str.find('.')+2
float = str[:split]
long = str[split:]
我是Java新手,所以我开始尝试查找等价物,但它似乎比正则表达式更复杂的解决方案?除非有更多类似于python的函数而不是拆分成char数组,并且反复迭代?
答案 0 :(得分:5)
使用indexOf
和substring
方法:
String str = "32.63578";
int i = str.indexOf(".") + 3;
String part1 = str.substring(0, i); // "32.63"
String part2 = str.substring(i); // "578"
float num1 = Float.parseFloat(part1); // 32.63
long num2 = Long.parseLong(part2); // 578
答案 1 :(得分:1)
正则表达式替代:
String str = "32.63578";
String[] parts = str.split("(?<=\\.\\d{2})");
System.out.println(parts[0]); // "32.63"
System.out.println(parts[1]); // "578"
关于使用的正则表达式:
(?<=\.\d{2})
这是积极的后视(?<=...)
。它匹配在前面有.
和2位数的位置。
答案 2 :(得分:0)
如果您想彻底打破这两个部分,可以使用split method in String。
但是,如果您希望在示例中包含尾随小数,则可能需要执行以下操作:
String str = "32.63578...";
String substr1, substr2;
for (int i = 0; i < str.length(); i++)
{
if (str.charAt(i) == '.')
{
substr1 = str.substring(0, i + 3);
substr2 = str.substring(i + 3, str.length());
break;
}
}
//convert substr1 and substr2 here
答案 3 :(得分:0)
String s ="32.63578";
Pattern pattern = Pattern.compile("(?<Start>\\d{1,10}.\\d{1,2})(?<End>\\d{1,10})");
Matcher match = pattern.matcher(s);
if (match.find()) {
String start = match.group("Start");
String ending = match.group("End");
System.out.println(start);
System.out.println(ending);
}