I have an application
namespace Aplikacija1
{
public class excercise5
{
static void Main(string[] args)
{
Console.WriteLine("Enter word :");
string word = Console.ReadLine();
Console.WriteLine("Enter the letter :");
string letter = Console.ReadLine();
int charPos = word.IndexOf($"{letter}");
Console.WriteLine(word.Remove(charPos, 1));
}
}
}
so it should remove a letter from the string which is entered.
If I enter word Nikola and letter a the result is Nikol which is correct
But if I enter word Nikala and the letter a the result is Nikla, with no option to remove second a, or choose which a I want to remove
Is there a way to add something to my code to make it work?
CodePudding user response:
You could use the Replace()
method and replace it with an empty string:
string wordWithoutLetter = word.Replace(letter, "");
Console.WriteLine(wordWithoutLetter);
CodePudding user response:
C.Evenhuis has told you what you need to do to get the result you want, but I just wanted to point out why your first attempt didn't work..
Remove
, in the way you used it, is something like a short way of saying RemoveEverythingAfter
- it's used for cutting large parts out of strings, and is something like the the opposite of Substring
. It isn't normally used for repeatedly removing individual characters or small parts. It cuts out and discards a section of a string, whereas Substring
cuts out and keeps parts of a string
Think about string indexes as being between the letters:
h e l l o _ w o r l d
^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^
0 1 2 3 4 5 6 7 8 9 1011
If you say Remove(7)
it will remove everything from 7 onwards (towards the right, so, 8, 9 ...):
h e l l o _ w o r l d
^^^^^^^^^^^^^ ^^^^^^^
Keep Remove
var hw = "hello_world";
Console.Print(hw.Remove(7)); //prints: hello_w
If you said Substring(7)
it keeps everything from 7 onwards
h e l l o _ w o r l d
^^^^^^^^^^^^^ ^^^^^^^
Remove Keep
var hw = "hello_world";
Console.Print(hw.Substring(7)); //prints: orld
Substring
and Remove
also have a form where they take a second parameter for the number of chars to keep or remove
If you said Substring(4, 3)
it keeps a length of 3 from index 4, so keeping chars between 4 and 7. If you say Remove(4, 3)
it removes 3 chars between 4 and 7
h e l l o _ w o r l d
^^^^^^^ ^^^^^ ^^^^^^^ Substring(4, 3)
Remove Keep Remove --> result: o_w
h e l l o _ w o r l d
^^^^^^^ ^^^^^ ^^^^^^^ Remove(4, 3)
Keep Remove Keep --> result: hellorld
All in, Remove
wasn't really what you wanted, because it's for cutting out ranges, not all occurrences of one char/string
for(var idx = word.IndexOf(letter); idx > -1; idx = word.IndexOf(letter))
word = word.Remove(idx, 1);
Footnote: Modern C# has another, more compact way of doing Substring just using indexes:
var hw = "hello_world";
hw[4..] //keep from index 4 to end, i.e. o_world
hw[..4] //keep from start to index 4, i.e. hell
hw[^4..] //keep from "4 back from end" to end, i.e. orld
hw[..^4] //keep from start to "4 back from end", i.e. hello_w
hw[7..10] //keep between 7 and 10, i.e. orl
hw[4..^4] //keep between 4 from start and 4 from end, i.e. o_w
hw[^8..8] //keep between 8 from end and 8 from start, i.e. lo_wo
And so on..