Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 我如何从字符串中获取;3+;10“;“到字符串”;3“&引用+&引用&引用;“10”吗;?_String_Unity3d_Split_Language Agnostic - Fatal编程技术网

String 我如何从字符串中获取;3+;10“;“到字符串”;3“&引用+&引用&引用;“10”吗;?

String 我如何从字符串中获取;3+;10“;“到字符串”;3“&引用+&引用&引用;“10”吗;?,string,unity3d,split,language-agnostic,String,Unity3d,Split,Language Agnostic,我正在Unity中制作一个图形计算器,我用字符串输入,比如“3+10”,我想把它拆分为“3”、“+”和“10” 我可以找到一种方法来处理它们,一旦我将它们转换成这种形式,但是我真的需要一种方法来将字符串拆分为加号、时间、指数等关键字符的左右两侧。 我是在Unity中这样做的,但是用任何语言来做都会有帮助。这里是C#方式——我之所以提到它,是因为您使用的是Unity words = phrase.Split(default(string[]),StringSplitOptions.RemoveEm

我正在Unity中制作一个图形计算器,我用字符串输入,比如“
3+10
”,我想把它拆分为“
3
”、“
+
”和“
10

我可以找到一种方法来处理它们,一旦我将它们转换成这种形式,但是我真的需要一种方法来将字符串拆分为加号、时间、指数等关键字符的左右两侧。

我是在Unity中这样做的,但是用任何语言来做都会有帮助。

这里是C#方式——我之所以提到它,是因为您使用的是Unity

words = phrase.Split(default(string[]),StringSplitOptions.RemoveEmptyEntries);

R:已编辑
将您的输入向量设为
xstrsplit(x,split=“(?以下是通过数学运算符拆分字符串的Java代码

String[] splitByOperators(String input) {
   String[] output = new String[input.length()];
    int index = 0;
    String current = "";
    for (char c : input){
        if (c == '+' || c == '-' || c == '*' || c == '/'){
            output[index] = current;
            index++;
            output[index] = c;
            index++;
            current = "";
        } else {
             current = current + c;
        }
    }
    output[index] = current;
    return output;
}

使用Python正则表达式:

>>> import re
>>> match = re.search(r'(\d+)(.*)(\d+)', "3+1")
>>> match.group(1)
'3'
>>> match.group(2)
'+'
>>> match.group(3)
'1'
使用正则表达式的原因是为了更灵活地处理各种简单的算术表达式。

C# 下面的代码将满足您的要求(仅此而已)。

string input=“3+10-5”;
字符串模式=@“([-+^*\/])”;
string[]substring=Regex.Split(输入,模式);
//子字符串中的结果={“3”、“+”、“10”、“-”、“5”}
通过使用而不是,您也可以检索数学运算符。这是通过将数学运算符放入捕获组
()
来完成的。如果您不熟悉正则表达式,您应该在谷歌上搜索基础知识

上面的代码将顽固地使用数学运算符分割字符串。如果字符串没有意义,则该方法不关心,甚至可能产生意外结果。例如,
“5//10-”
将导致
{“5”、“/”、“、”10”、“-”、“}
。请注意,只返回一个
/
,并添加空字符串


在尝试拆分字符串之前,可以使用更复杂的正则表达式检查字符串是否为有效的数学表达式。例如
^(\d+(?:。\d+)+([-+*^\/]\g)?)$
将检查您的字符串是否由十进制数以及运算符和另一个十进制数的零或多个组合组成。

相关:当您仅限于C或UnityScript时,与语言无关的字符串拆分问题似乎有些毫无意义。这与OP想要的正好相反;)@史蒂芬·霍夫曼:谢谢,读这个问题的时候一定是自动驾驶的。编辑纠正了我的错误。
>>> import re
>>> match = re.search(r'(\d+)(.*)(\d+)', "3+1")
>>> match.group(1)
'3'
>>> match.group(2)
'+'
>>> match.group(3)
'1'