logancapp
logancapp

Reputation: 3

Substring until space

I have string like this:

Some data of the string Job ID_Of_the_job some other data of the string

I need to get this ID_Of_the_job

I here this stored in notes string variable

intIndex = notes.IndexOf("Job ")
strJob = notes.Substring(intIndex+4, ???)

I dont know how to get the lenght of this job.

Thanks for help, Marc

Upvotes: 0

Views: 568

Answers (3)

Caius Jard
Caius Jard

Reputation: 74710

I think I'd make life easy, split the string on spaces and take the string after the array slot that had Job in it:

var notes = "Some data of the string Job ID_Of_the_job some other data of the string";
var bits = notes.Split();
var job = bits[bits.IndexOf("Job") + 1]; //or Array.IndexOf..

If you're on a recent .net and know the job number will occur within the first 10 (say) words, then you can stop splitting after a certain number of words, with e.g. Split(new[]{' '}, 10) - this gives the first 9 words then the rest of the string in the 10th slot which could be a useful performance boost

You could also pull this fairly easily with regex:

var r = new Regex("Job (?<j>[^ ]+?)");
var m = r.Match(notes);
var job = m.Groups["j"].Value;

If you can more accurately define the format of a job number e.g. "it's between 2-3 digits, then a underscore, slash or hyphen, followed by 4 digits", then you don't even have to use Job to locate it, you can put the pattern into the regex:

var r = new Regex(@"(?<j>\d{2,3}[-_\\]\d{4})");

That will pick out a string of the given pattern (\digits {2 to 3 of}, then [hyphen or underscore or slash], then \digits {4 of}).. For example

Upvotes: 2

canton7
canton7

Reputation: 42350

Since you're already using string.IndexOf, here's a solution which builds on that.

Note that there's an overload of String.IndexOf which takes a parameter saying where to start searching.

We've managed to find the beginning of the Job ID, by doing:

int startIndex = notes.IndexOf("Job ") + "Job ".Length;

startIndex is the index of the "I" in "ID_Of_the_job".

We can then use IndexOf again to find the next space -- which will be the space following "ID_Of_the_job":

int endIndex = notes.IndexOf(" ", startIndex);

We can then use Substring:

string jobId = notes.Substring(startIndex, endIndex - startIndex);

Note that there's no error-handling here: if either of the IndexOf fails to find the thing you're looking for, it will return -1, and your code will do strange things. It would be a good idea to handle these cases!


Another, terser solution is to use Regex.

string jobId = Regex.Match(notes, @"Job (\S+)").Groups[1].Value

The regular expression Job (\S+) looks for the text "Job ", followed by 1 or more non-whitespace characters. It puts those non-whitespace characters into a capture group (which becomes Groups[1]), which we can read out.

In this case, jobId will be an empty string if the regex doesn't match.

See these working on dotnetfiddle.

Upvotes: 2

Sinatr
Sinatr

Reputation: 22008

First step you already did: find the string "Job id ". Second step is to split result by ' ' to extract id.

var input = "Some data of the string Job ID_Of_the_job some other data of the string";
Console.WriteLine(input.Substring(input.IndexOf("Job") + 4).Split(' ')[0]);

Fiddle.

Upvotes: 0

Related Questions