简体   繁体   English

如何使用String.IndexOf方法找到正确的值?

[英]how can I use String.IndexOf method to find the correct value?

I want to make my sentence like below, but how can I use String.IndexOf method to find the correct value of MINVALUE to make start with value change in sentence with given conditions? 我想使句子如下所示,但是如何使用String.IndexOf方法找到正确的MINVALUE值,以在给定条件下改变句子的值呢?

sentence 句子

CREATE SEQUENCE "MY_TEST_SEQUENCE" MINVALUE 8 MAXVALUE 999 INCREMENT BY 1 START WITH 55 CACHE 20 NOORDER NOCYCLE 创建序列“ MY_TEST_SEQUENCE”最小值8最大值999以1开始时增加55高速缓存20 NOORDER NOCLE

result 结果

CREATE SEQUENCE "MY_TEST_SEQUENCE" MINVALUE 8 MAXVALUE 999 INCREMENT BY 1 START WITH 8 CACHE 20 NOORDER NOCYCLE 创建序列“ MY_TEST_SEQUENCE”最小值8最大值999以1开始以8缓存20 NOORDER NCYCLE递增

Conditions 条件

  1. if MINVALUE has plus value (8) than make start with value same as MINVALUE (8)... 如果MINVALUE具有加号(8),则以与MINVALUE(8)相同的值开始...
  2. if MINVALUE has minus (-8) value than make start with value same as MAXVALUE (999) 如果MINVALUE的值是负数(-8),则以与MAXVALUE相同的值开始(999)

My Code 我的密码

var startvalue = 0;
if(MINVALUE > 0)
{
    startvalue = MINVALUE;
}
Else if(MINVALUE < 0)
{
    startvalue = MAXVALUE;
}
var result = String.Format(@"CREATE SEQUENCE ""MY_TEST_SEQUENCE"" MINVALUE 8 MAXVALUE 999 INCREMENT BY 1 START WITH {0}  CACHE 20 NOORDER NOCYCLE",startvalue)

Seems like a regular expression with capture groups would be a better fit than trying to break the string into pieces. 看起来像带有捕获组的正则表达式比尝试将字符串分解成碎片更合适。

var regex = new Regex(@".*\s+MINVALUE\s+(-?\d*)\s+MAXVALUE\s+(-?\d*)\s+.*");
var sentence = @"CREATE SEQUENCE ""MY_TEST_SEQUENCE"" MINVALUE 8 MAXVALUE 999 INCREMENT BY 1 START WITH 55 CACHE 20 NOORDER NOCYCLE";

var match = regex.Match(sentence);

if (match.Groups.Count != 3)
{
    throw new ApplicationException("input string not in expected format");
}

var minValue = int.Parse(match.Groups[1].Value);
var maxValue = int.Parse(match.Groups[2].Value);

var result = string.Format(@"CREATE SEQUENCE ""MY_TEST_SEQUENCE"" MINVALUE 8 MAXVALUE 999 INCREMENT BY 1 START WITH {0}  CACHE 20 NOORDER NOCYCLE", minValue < 0 ? maxValue : minValue);

I think this should work for you; 我认为这应该为您工作;

string sentence = @"CREATE SEQUENCE 'MY_TEST_SEQUENCE' MINVALUE -8 MAXVALUE 999 INCREMENT BY 1 START WITH 55 CACHE 20 NOORDER NOCYCLE";
string pattern = @".*\s+MINVALUE[ ]*(?<MinValue>[-?\d]*)[ ]*MAXVALUE[ ]*(?<MaxValue>[\d]*)";
Regex rgx = new Regex(pattern);
Match match = rgx.Match(sentence);
Group gp1 = match.Groups[1];//-8 or 8 (both valid).
Group gp2 = match.Groups[2];//Value after MAXVALUE.
if (gp1.Value.StartsWith("-") == false)//No minus sign,that must be a positive value.
{
  string s2 = string.Format(@"CREATE SEQUENCE ""MY_TEST_SEQUENCE"" MINVALUE 8 MAXVALUE 999  INCREMENT BY 1 START WITH {0} CACHE 20 NOORDER NOCYCLE", gp1.Value);
  MessageBox.Show(s2);
}

else if (gp1.Value.StartsWith("-") == true)//No need for further checking, a value with - will always be smaller.
{
  string s2 = string.Format(@"CREATE SEQUENCE ""MY_TEST_SEQUENCE"" MINVALUE 8 MAXVALUE 999 INCREMENT BY 1 START WITH {0} CACHE 20 NOORDER NOCYCLE", gp2.Value);
  MessageBox.Show(s2);
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM