Real simple question... for good programmers

Paul Backus snarwin at gmail.com
Sun Oct 23 00:07:46 UTC 2022


On Saturday, 22 October 2022 at 21:53:05 UTC, WhatMeWorry wrote:
>
>
> string[] tokens = userSID.output.split!isWhite;
> writeln("tokens = ", tokens);	
[...]
> Is there a clever way that I can discard all the extra null 
> strings in the resultant string array?

Easiest way is to use [`filter`][1]. Here's an example:

```d
import std.algorithm: splitter, filter;
import std.uni: isWhite; // or use std.ascii for non-unicode input
import std.array: array;
import std.stdio: writeln;

string exampleText =
     "Hello           123-456-ABC    x\ny\tz\r\nwvu   goodbye";

void main()
{
	string[] tokens = exampleText
         .splitter!isWhite
         .filter!(t => t.length > 0)
         .array;
	writeln("tokens = ", tokens);
}
```

I've also used the lazily-evaluated [`splitter`][2] instead of 
the eagerly-evaluated `split`, to avoid allocating a temporary 
array unnecessarily.

[1]: 
https://phobos.dpldocs.info/std.algorithm.iteration.filter.html
[2]: 
https://phobos.dpldocs.info/std.algorithm.iteration.splitter.3.html


More information about the Digitalmars-d-learn mailing list