【问题标题】:Find the operator in string and get left and right word在字符串中查找运算符并获取左右单词
【发布时间】:2016-04-20 16:01:29
【问题描述】:

如何在字符串中找到运算符?之后,我想创建获取 left 和 right 变量。

如果字符串是:

DisengagementPoint=TravelForce

脱离点=100

但有些时间字符串会更长,例如:

脱离点=100 (VehicleSpeed>2) || (EngineRpm== 0)

我想用“=”左侧的任何内容创建一个字符串,右侧创建一个字符串,我该怎么做?

我预期的输出:

var1 = 脱离点

var2 = 100 或 TravelForce

var3 = (VehicleSpeed>2) || (EngineRpm== 0)

对不起,这是相当伪的,但希望它是有道理的。

【问题讨论】:

  • 您可以使用string.Split('=') 来获取一个数组。那么strArr[0]是左边,strArr[1]是右边。
  • = 是您唯一关心的运营商吗?您想如何处理多次发生的情况?
  • 对于“(”“)”之间的变量我使用解释器
  • 我认为首先我需要取出 () 之间的内容,然后用 DisengagementPoint=100 和一个 (VehicleSpeed>2) || (EngineRpm== 0) 制作 2 个字符串
  • @AdrianMoldovan:为什么不用输入旁边的预期输出来更新您的问题?

标签: c#


【解决方案1】:

我想在其他优秀的答案中添加两点:

A) string.Split 将字符串全部等分,因此 DisengagementPoint=100 会很好地输出,但 line = "DisengagementPoint=100 (VehicleSpeed>2) || (EngineRpm== 0)" 会变得非常混乱,因为仅使用字符串 string[] split = line.Split('=') 拆分会产生数组:

split[0] = "DisengagementPoint"
split[1] = "100 (VehicleSpeed>2) || (EngineRpm"
split[2] = ""
split[3] = " 0)"

这可以通过限制最大拆分数来消除,line.Split('=', 2) 最多返回两个子字符串。 line.Split('=', StringSplitOptions.RemoveEmptyEntries) 也可以帮助摆脱空零件,但在这种情况下这不是问题。

B) 比较运算符== 有什么问题? Perheaps 检查是否只有一个 equals 或多个,如果有更多,则检查它们后面是否至少有两个。

正如@AustinWBryan 对@Dmitry Bychenko 的帖子的评论中提到的,这开始看起来是解析器问题,在我看来这是一个有点不同的问题。

【讨论】:

    【解决方案2】:

    只要找到=的位置并取子串:

    String source = "DisengagementPoint=100";
    
    int index = source.IndexOf('=');
    
    // you may want to test if there's '=' in the string
    // if (index >= 0) ...   
    
    String left = source.Substring(0, index);
    String right = source.Substring(index + 1);
    

    【讨论】:

    • 这不适用于他后面的DisengagementPoint=100 (VehicleSpeed>2) || (EngineRpm== 0)示例
    • @AustinWBryan:"DisengagementPoint=100 (VehicleSpeed>2) || (EngineRpm== 0)" 的预期输出是什么?我当前的代码将返回 DisengagementPoint100 (VehicleSpeed>2) || (EngineRpm== 0)
    • 首先我认为我需要将字符串分成两个,一个是DisengagementPoint=100,一个是(VehicleSpeed>2) || (EngineRpm== 0)
    • 不是很清楚,但我相信他想要一些表达式树,所有的术语都是自己存储的; str[0] = "DisengagementPoint", str[1] = "100", str[2] = "VechicleSpeed"等,在维护操作顺序的同时,基本上是一个parse
    【解决方案3】:
    var word = "DisengagementPoint=TravelForce";
    var index = word.IndexOf("=");
    
    if(index > 1)
    {
        var left  = word.Substring(0, index);
        var right = word.Substring(index + 1,word.Length - index - 1);
    }
    

    正如 DmitryBychenko 提到的

    var right = word.Substring(index + 1,word.Length - index - 1);
    

    可以替换为

    var right = word.Substring(index + 1);
    

    【讨论】:

    • word.Length-index-1 在最后一个Substring 多余,word.Substring(index+1); 就够了
    猜你喜欢
    • 1970-01-01
    • 2019-05-24
    • 2014-08-14
    • 2021-08-07
    • 2015-12-05
    • 2016-09-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多