在Java中查找正则表达式以分隔表示复数的字符串。代码示例会很棒。 输入字符串的格式为:
"a+bi"
Example: "300+400i", "4+2i", "5000+324i".
我需要检索300&来自String的400。'
我知道我们可以这样粗暴地做到这一点。
str.substring(0, str.indexOf('+'));
str.substring(str.indexOf('+')+1,str.indexOf("i"));
答案 0 :(得分:2)
我需要检索300&来自String的400。
使用String.split(regex)
函数怎么样:
String s[] = "300-400i".split("[\\Q+-\\Ei]");
System.out.println(s[0]+" "+s[1]); //prints 300 400
答案 1 :(得分:2)
与此匹配的正则表达式为:/[0-9]{1,}[+-][0-9]{1,}i/
您可以使用此方法:
Pattern complexNumberPattern = Pattern.compile("[0-9]{1,}");
Matcher complexNumberMatcher = complexNumberPattern.matcher(myString);
并使用find
上的group
和complexNumberMatcher
方法从myString
答案 2 :(得分:0)
使用这个:
[0-9]{1,}
它会返回数字。
希望它有所帮助。
答案 3 :(得分:0)
试试这个。至于我,它有效。
public static void main(String[] args) {
String[] attempts = new String[]{"300+400i", "4i+2", "5000-324i", "555", "2i", "+400", "-i"};
for (String s : attempts) {
System.out.println("Parsing\t" + s);
printComplex(s);
}
}
static void printComplex(String in) {
String[] parts = in.split("[+-]");
int re = 0, im = 0, pos = -1;
for (String s : parts) {
if (pos != -1) {
s = in.charAt(pos) + s;
} else {
pos = 0;
if ("".equals(s)) {
continue;
}
}
pos += s.length();
if (s.lastIndexOf('i') == -1) {
if (!"+".equals(s) && !"-".equals(s)) {
re += Integer.parseInt(s);
}
} else {
s = s.replace("i", "");
if ("+".equals(s)) {
im++;
} else if ("-".equals(s)) {
im--;
} else {
im += Integer.parseInt(s);
}
}
}
System.out.println("Re:\t" + re + "\nIm:\t" + im);
}
输出:
Parsing 300+400i
Re: 300
Im: 400
Parsing 4i+2
Re: 2
Im: 4
Parsing 5000-324i
Re: 5000
Im: -324
Parsing 555
Re: 555
Im: 0
Parsing 2i
Re: 0
Im: 2
答案 4 :(得分:0)
正则表达式
([-+]?\d+\.?\d*|[-+]?\d*\.?\d+)\s*\+\s*([-+]?\d+\.?\d*|[-+]?\d*\.?\d+)i
示例正则表达式
http://rubular.com/r/FfOAt1zk0v
示例Java
string regexPattern =
// Match any float, negative or positive, group it
@"([-+]?\d+\.?\d*|[-+]?\d*\.?\d+)" +
// ... possibly following that with whitespace
@"\s*" +
// ... followed by a plus
@"\+" +
// and possibly more whitespace:
@"\s*" +
// Match any other float, and save it
@"([-+]?\d+\.?\d*|[-+]?\d*\.?\d+)" +
// ... followed by 'i'
@"i";
Regex regex = new Regex(regexPattern);
Console.WriteLine("Regex used: " + regex);
while (true)
{
Console.WriteLine("Write a number: ");
string imgNumber = Console.ReadLine();
Match match = regex.Match(imgNumber);
double real = double.Parse(match.Groups[1].Value, CultureInfo.InvariantCulture);
double img = double.Parse(match.Groups[2].Value, CultureInfo.InvariantCulture);
Console.WriteLine("RealPart={0};Imaginary part={1}", real, img);
}
答案 5 :(得分:0)
理论上你可以使用这样的东西:
Pattern complexNumberPattern = Pattern.compile("(.*)+(.*)");
Matcher complexNumberMatcher = complexNumberPattern.matcher(myString);
if (complexNumberMatcher.matches()) {
String prePlus = complexNumberMatcher.group(1);
String postPlus = complexNumberMatcher.group(2);
}
这可以让您在选择数字时获得的优势在于它可以让您阅读以下内容: 5b + 17c为5b和17c
编辑:只是注意到你不想要这些字母,所以没关系,但如果出现其他字母,这会让你更多地控制它。