Java字符串 - >两个数字

时间:2014-02-26 04:32:55

标签: java regex

我希望执行的操作是:

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数组,并且反复迭代?

4 个答案:

答案 0 :(得分:5)

使用indexOfsubstring方法:

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);
    }