Masks first name of a string
How effectively mask first name from a string?
Input: Dear Elaine Jasper, Thank you for coming
Output: Dear **** Jasper, Thank you for coming
Input: Dear Muhammad Ali Yusuf, Thank you for coming
Output: Dear **** **** Yusuf, Thank you for coming
Input: Dear Yusuf, Thank you for coming
Output: Dear Yusuf, Thank you for coming
Currently I'm able to removed everything before the comma,
string output1 = input.Substring(input.IndexOf(',') + 1);
string output = "Dear ****," + output1;
But I'm not entirely sure how to make the surname remain.
The message is for logging, client request to mask the first name.
c#
|
show 2 more comments
How effectively mask first name from a string?
Input: Dear Elaine Jasper, Thank you for coming
Output: Dear **** Jasper, Thank you for coming
Input: Dear Muhammad Ali Yusuf, Thank you for coming
Output: Dear **** **** Yusuf, Thank you for coming
Input: Dear Yusuf, Thank you for coming
Output: Dear Yusuf, Thank you for coming
Currently I'm able to removed everything before the comma,
string output1 = input.Substring(input.IndexOf(',') + 1);
string output = "Dear ****," + output1;
But I'm not entirely sure how to make the surname remain.
The message is for logging, client request to mask the first name.
c#
SoMuhammad Ali
is(are) a first name(s)?
– SeM
Nov 22 '18 at 12:08
@SeM In some cases,Muhammad Ali
can be a first name, yes.
– Ahmad
Nov 22 '18 at 12:10
4
So how about grabbing the text between "Dear" and the comma, and removing all words except the last?
– stuartd
Nov 22 '18 at 12:12
This looks like could be solved using regex. Does the text will always have this pattern? "Dear <person>, Thank you for coming"
– Pedro Lima
Nov 22 '18 at 12:12
3
Without knowing what part of the string is actually a "first name" it's simply impossible to do that reliably. All you can do is to try to guess what is it and hope they all follow the same pattern, which is obviously wrong.
– Alejandro
Nov 22 '18 at 12:43
|
show 2 more comments
How effectively mask first name from a string?
Input: Dear Elaine Jasper, Thank you for coming
Output: Dear **** Jasper, Thank you for coming
Input: Dear Muhammad Ali Yusuf, Thank you for coming
Output: Dear **** **** Yusuf, Thank you for coming
Input: Dear Yusuf, Thank you for coming
Output: Dear Yusuf, Thank you for coming
Currently I'm able to removed everything before the comma,
string output1 = input.Substring(input.IndexOf(',') + 1);
string output = "Dear ****," + output1;
But I'm not entirely sure how to make the surname remain.
The message is for logging, client request to mask the first name.
c#
How effectively mask first name from a string?
Input: Dear Elaine Jasper, Thank you for coming
Output: Dear **** Jasper, Thank you for coming
Input: Dear Muhammad Ali Yusuf, Thank you for coming
Output: Dear **** **** Yusuf, Thank you for coming
Input: Dear Yusuf, Thank you for coming
Output: Dear Yusuf, Thank you for coming
Currently I'm able to removed everything before the comma,
string output1 = input.Substring(input.IndexOf(',') + 1);
string output = "Dear ****," + output1;
But I'm not entirely sure how to make the surname remain.
The message is for logging, client request to mask the first name.
c#
c#
asked Nov 22 '18 at 12:05
AppeShopperAppeShopper
538
538
SoMuhammad Ali
is(are) a first name(s)?
– SeM
Nov 22 '18 at 12:08
@SeM In some cases,Muhammad Ali
can be a first name, yes.
– Ahmad
Nov 22 '18 at 12:10
4
So how about grabbing the text between "Dear" and the comma, and removing all words except the last?
– stuartd
Nov 22 '18 at 12:12
This looks like could be solved using regex. Does the text will always have this pattern? "Dear <person>, Thank you for coming"
– Pedro Lima
Nov 22 '18 at 12:12
3
Without knowing what part of the string is actually a "first name" it's simply impossible to do that reliably. All you can do is to try to guess what is it and hope they all follow the same pattern, which is obviously wrong.
– Alejandro
Nov 22 '18 at 12:43
|
show 2 more comments
SoMuhammad Ali
is(are) a first name(s)?
– SeM
Nov 22 '18 at 12:08
@SeM In some cases,Muhammad Ali
can be a first name, yes.
– Ahmad
Nov 22 '18 at 12:10
4
So how about grabbing the text between "Dear" and the comma, and removing all words except the last?
– stuartd
Nov 22 '18 at 12:12
This looks like could be solved using regex. Does the text will always have this pattern? "Dear <person>, Thank you for coming"
– Pedro Lima
Nov 22 '18 at 12:12
3
Without knowing what part of the string is actually a "first name" it's simply impossible to do that reliably. All you can do is to try to guess what is it and hope they all follow the same pattern, which is obviously wrong.
– Alejandro
Nov 22 '18 at 12:43
So
Muhammad Ali
is(are) a first name(s)?– SeM
Nov 22 '18 at 12:08
So
Muhammad Ali
is(are) a first name(s)?– SeM
Nov 22 '18 at 12:08
@SeM In some cases,
Muhammad Ali
can be a first name, yes.– Ahmad
Nov 22 '18 at 12:10
@SeM In some cases,
Muhammad Ali
can be a first name, yes.– Ahmad
Nov 22 '18 at 12:10
4
4
So how about grabbing the text between "Dear" and the comma, and removing all words except the last?
– stuartd
Nov 22 '18 at 12:12
So how about grabbing the text between "Dear" and the comma, and removing all words except the last?
– stuartd
Nov 22 '18 at 12:12
This looks like could be solved using regex. Does the text will always have this pattern? "Dear <person>, Thank you for coming"
– Pedro Lima
Nov 22 '18 at 12:12
This looks like could be solved using regex. Does the text will always have this pattern? "Dear <person>, Thank you for coming"
– Pedro Lima
Nov 22 '18 at 12:12
3
3
Without knowing what part of the string is actually a "first name" it's simply impossible to do that reliably. All you can do is to try to guess what is it and hope they all follow the same pattern, which is obviously wrong.
– Alejandro
Nov 22 '18 at 12:43
Without knowing what part of the string is actually a "first name" it's simply impossible to do that reliably. All you can do is to try to guess what is it and hope they all follow the same pattern, which is obviously wrong.
– Alejandro
Nov 22 '18 at 12:43
|
show 2 more comments
6 Answers
6
active
oldest
votes
here's a function that should help you. Please note that it can be optimized more for performance, and also note that the function assumes the surname is a single word.
using System;
public class Program
{
public static void Main()
{
Console.WriteLine(MaskName("Dear John Sanders, welcome to our new service."));
Console.WriteLine(MaskName("Dear John Sanders, welcome to our new service.", true));
Console.WriteLine(MaskName("Dear John Matthew Sanders, welcome to our new service."));
Console.WriteLine(MaskName("Dear John Matthew Sanders, welcome to our new service.", true));
}
public static string MaskName(string text, bool maskSurname = false)
{
var greeting = text.Substring(0, text.IndexOf(','));
var message = text.Substring(greeting.Length);
var parts = greeting.Split(' ');
for (int i = 1; i < parts.Length; i++) // Start from 1, skipping "Dear"
{
if (i == parts.Length - 1 && !maskSurname) continue; // Optionally mask the surname
greeting = greeting.Replace(parts[i], "*****");
}
return greeting + message;
}
}
Run the program and the output will be:
Dear ***** Sanders, welcome to our new service.
Dear ***** *****, welcome to our new service.
Dear ***** ***** Sanders, welcome to our new service.
Dear ***** ***** *****, welcome to our new service.
Hope that helps :)
add a comment |
try this
string phrase = "Dear Muhammad Ali Yusuf, Thank you for coming";
string words_1 = phrase.Split(',');
string words_2=words_1[0].Split(' ');
string newstr = words_2[0] ;
for (int i=0;i<words_2.Length;i++)
{
if (i>0 && i< words_2.Length-1)
{
newstr =newstr+ " ****";
}
}
Console.WriteLine(newstr+" "+words_2[words_2.Length-1] + words_1[1]);
add a comment |
You can use String.Split Method, to split your sentence into two parts, then from first part, which contains the word Dear
and your whole name, take only names, mask them, and compose new one.
public string HideName(string str)
{
//First split by comma
var splittedByComma = str.Split(',');
//Then get separate words from splitted array's first part
var words = splittedByComma[0].Split(' ');
//Get names before last name
var name = words.Skip(1).Take(words.Length - 2);
//Replace all chars from first names with '*'
var hiddenPart = string.Join(" ", name.Select(s => new string(s.Select(ch => '*').ToArray())));
//Compose result
var result = string.Format("Dear {0} {1}, {2}", hiddenPart, words.Last(), splittedByComma[1].Trim());
return result;
}
Usage:
var strs = new
{
"Dear Elaine Jasper, Thank you for coming",
"Dear Muhammad Ali Yusuf, Thank you for coming",
"Dear Yusuf, Thank you for coming"
};
foreach (var item in strs)
{
var djfdsf = HideName(item);
}
Output:
Dear ****** Jasper, Thank you for coming
Dear ******** *** Yusuf, Thank you for coming
Dear Yusuf, Thank you for coming
References: DotNetFiddle Example, String.Split Method, String.Join method, Enumerable.Select Method, Enumerable.Skip Method, Enumerable.Take Method
add a comment |
Well, you could do something along the lines of:
public static string MaskNames(string input)
{
var names = input.Split(new { "Dear ", "," }, StringSplitOptions.RemoveEmptyEntries).First().Split(' ').ToList();
string stringToReplace = names.Any() ? string.Join(" ", names.Take(names.Count - 1)) : null;
if (!string.IsNullOrEmpty(stringToReplace))
{
var maskedNameStr = string.Join(" ", names.Take(names.Count - 1).Select(s => new string('*', s.Length)));
return input.Replace(stringToReplace, maskedNameStr);
}
return input;
}
And the usage:
MaskNames("Dear Elaine ABC Jasper, Thank you for coming**");
MaskNames("Dear Yusuf, Thank you for coming");
add a comment |
The method in the snippet below works by first grabbing the first segment of the input string (the part that is left of the comma) then obtaining the supposed first name from the above-mentioned string (which is between the first and last spaces) then masking it. :)
public static string MaskFirstName(string greeting)
{
// make sure there's something to actually work with
if(greeting.Trim() == string.Empty)
{
return string.Empty;
}
string masked = "";
// clean up the input string by removing any leading and trailing white spaces
greeting = greeting.Trim();
// index of the comma
int commaInd = greeting.IndexOf(',');
// get the name of the person
string target = greeting.Substring(0, commaInd);
// index of the first space
int firstSpaceInd = target.IndexOf(' ');
// index of the last space
int lastSpaceInd = target.LastIndexOf(' ');
// The indiviual chars of our target string
char chars = target.ToCharArray();
// replace the characters between the first space and the last space in our target string
for (int i = firstSpaceInd + 1; i != lastSpaceInd; i++)
{
chars[i] = '*';
}
// rebuild our original input string with the masked name
masked = greeting.Replace(target, new string(chars));
return masked;
}
The output of the method above will be something like
input: Dear Muhammad Ali Yusuf, Thank you for coming
output: Dear ************ Yusuf, Thank you for coming
input: Dear Elaine Jasper, Thank you for coming
output: Dear ****** Jasper, Thank you for coming
add a comment |
My contribution:
public string Mask(string sentence)
{
const string mask = "****";
var parts = sentence.Split(',');
var words = parts[0].Split(' ');
var masked = words.Select((w, i) => i == 0 || i == words.Length - 1 ? w : mask);
return string.Join(" ", masked) + "," + parts[1];
}
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53430646%2fmasks-first-name-of-a-string%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
6 Answers
6
active
oldest
votes
6 Answers
6
active
oldest
votes
active
oldest
votes
active
oldest
votes
here's a function that should help you. Please note that it can be optimized more for performance, and also note that the function assumes the surname is a single word.
using System;
public class Program
{
public static void Main()
{
Console.WriteLine(MaskName("Dear John Sanders, welcome to our new service."));
Console.WriteLine(MaskName("Dear John Sanders, welcome to our new service.", true));
Console.WriteLine(MaskName("Dear John Matthew Sanders, welcome to our new service."));
Console.WriteLine(MaskName("Dear John Matthew Sanders, welcome to our new service.", true));
}
public static string MaskName(string text, bool maskSurname = false)
{
var greeting = text.Substring(0, text.IndexOf(','));
var message = text.Substring(greeting.Length);
var parts = greeting.Split(' ');
for (int i = 1; i < parts.Length; i++) // Start from 1, skipping "Dear"
{
if (i == parts.Length - 1 && !maskSurname) continue; // Optionally mask the surname
greeting = greeting.Replace(parts[i], "*****");
}
return greeting + message;
}
}
Run the program and the output will be:
Dear ***** Sanders, welcome to our new service.
Dear ***** *****, welcome to our new service.
Dear ***** ***** Sanders, welcome to our new service.
Dear ***** ***** *****, welcome to our new service.
Hope that helps :)
add a comment |
here's a function that should help you. Please note that it can be optimized more for performance, and also note that the function assumes the surname is a single word.
using System;
public class Program
{
public static void Main()
{
Console.WriteLine(MaskName("Dear John Sanders, welcome to our new service."));
Console.WriteLine(MaskName("Dear John Sanders, welcome to our new service.", true));
Console.WriteLine(MaskName("Dear John Matthew Sanders, welcome to our new service."));
Console.WriteLine(MaskName("Dear John Matthew Sanders, welcome to our new service.", true));
}
public static string MaskName(string text, bool maskSurname = false)
{
var greeting = text.Substring(0, text.IndexOf(','));
var message = text.Substring(greeting.Length);
var parts = greeting.Split(' ');
for (int i = 1; i < parts.Length; i++) // Start from 1, skipping "Dear"
{
if (i == parts.Length - 1 && !maskSurname) continue; // Optionally mask the surname
greeting = greeting.Replace(parts[i], "*****");
}
return greeting + message;
}
}
Run the program and the output will be:
Dear ***** Sanders, welcome to our new service.
Dear ***** *****, welcome to our new service.
Dear ***** ***** Sanders, welcome to our new service.
Dear ***** ***** *****, welcome to our new service.
Hope that helps :)
add a comment |
here's a function that should help you. Please note that it can be optimized more for performance, and also note that the function assumes the surname is a single word.
using System;
public class Program
{
public static void Main()
{
Console.WriteLine(MaskName("Dear John Sanders, welcome to our new service."));
Console.WriteLine(MaskName("Dear John Sanders, welcome to our new service.", true));
Console.WriteLine(MaskName("Dear John Matthew Sanders, welcome to our new service."));
Console.WriteLine(MaskName("Dear John Matthew Sanders, welcome to our new service.", true));
}
public static string MaskName(string text, bool maskSurname = false)
{
var greeting = text.Substring(0, text.IndexOf(','));
var message = text.Substring(greeting.Length);
var parts = greeting.Split(' ');
for (int i = 1; i < parts.Length; i++) // Start from 1, skipping "Dear"
{
if (i == parts.Length - 1 && !maskSurname) continue; // Optionally mask the surname
greeting = greeting.Replace(parts[i], "*****");
}
return greeting + message;
}
}
Run the program and the output will be:
Dear ***** Sanders, welcome to our new service.
Dear ***** *****, welcome to our new service.
Dear ***** ***** Sanders, welcome to our new service.
Dear ***** ***** *****, welcome to our new service.
Hope that helps :)
here's a function that should help you. Please note that it can be optimized more for performance, and also note that the function assumes the surname is a single word.
using System;
public class Program
{
public static void Main()
{
Console.WriteLine(MaskName("Dear John Sanders, welcome to our new service."));
Console.WriteLine(MaskName("Dear John Sanders, welcome to our new service.", true));
Console.WriteLine(MaskName("Dear John Matthew Sanders, welcome to our new service."));
Console.WriteLine(MaskName("Dear John Matthew Sanders, welcome to our new service.", true));
}
public static string MaskName(string text, bool maskSurname = false)
{
var greeting = text.Substring(0, text.IndexOf(','));
var message = text.Substring(greeting.Length);
var parts = greeting.Split(' ');
for (int i = 1; i < parts.Length; i++) // Start from 1, skipping "Dear"
{
if (i == parts.Length - 1 && !maskSurname) continue; // Optionally mask the surname
greeting = greeting.Replace(parts[i], "*****");
}
return greeting + message;
}
}
Run the program and the output will be:
Dear ***** Sanders, welcome to our new service.
Dear ***** *****, welcome to our new service.
Dear ***** ***** Sanders, welcome to our new service.
Dear ***** ***** *****, welcome to our new service.
Hope that helps :)
edited Nov 22 '18 at 12:45
answered Nov 22 '18 at 12:33
Alex DomeniciAlex Domenici
16636
16636
add a comment |
add a comment |
try this
string phrase = "Dear Muhammad Ali Yusuf, Thank you for coming";
string words_1 = phrase.Split(',');
string words_2=words_1[0].Split(' ');
string newstr = words_2[0] ;
for (int i=0;i<words_2.Length;i++)
{
if (i>0 && i< words_2.Length-1)
{
newstr =newstr+ " ****";
}
}
Console.WriteLine(newstr+" "+words_2[words_2.Length-1] + words_1[1]);
add a comment |
try this
string phrase = "Dear Muhammad Ali Yusuf, Thank you for coming";
string words_1 = phrase.Split(',');
string words_2=words_1[0].Split(' ');
string newstr = words_2[0] ;
for (int i=0;i<words_2.Length;i++)
{
if (i>0 && i< words_2.Length-1)
{
newstr =newstr+ " ****";
}
}
Console.WriteLine(newstr+" "+words_2[words_2.Length-1] + words_1[1]);
add a comment |
try this
string phrase = "Dear Muhammad Ali Yusuf, Thank you for coming";
string words_1 = phrase.Split(',');
string words_2=words_1[0].Split(' ');
string newstr = words_2[0] ;
for (int i=0;i<words_2.Length;i++)
{
if (i>0 && i< words_2.Length-1)
{
newstr =newstr+ " ****";
}
}
Console.WriteLine(newstr+" "+words_2[words_2.Length-1] + words_1[1]);
try this
string phrase = "Dear Muhammad Ali Yusuf, Thank you for coming";
string words_1 = phrase.Split(',');
string words_2=words_1[0].Split(' ');
string newstr = words_2[0] ;
for (int i=0;i<words_2.Length;i++)
{
if (i>0 && i< words_2.Length-1)
{
newstr =newstr+ " ****";
}
}
Console.WriteLine(newstr+" "+words_2[words_2.Length-1] + words_1[1]);
edited Nov 22 '18 at 12:55
answered Nov 22 '18 at 12:41
Dhanushka DayawanshaDhanushka Dayawansha
32619
32619
add a comment |
add a comment |
You can use String.Split Method, to split your sentence into two parts, then from first part, which contains the word Dear
and your whole name, take only names, mask them, and compose new one.
public string HideName(string str)
{
//First split by comma
var splittedByComma = str.Split(',');
//Then get separate words from splitted array's first part
var words = splittedByComma[0].Split(' ');
//Get names before last name
var name = words.Skip(1).Take(words.Length - 2);
//Replace all chars from first names with '*'
var hiddenPart = string.Join(" ", name.Select(s => new string(s.Select(ch => '*').ToArray())));
//Compose result
var result = string.Format("Dear {0} {1}, {2}", hiddenPart, words.Last(), splittedByComma[1].Trim());
return result;
}
Usage:
var strs = new
{
"Dear Elaine Jasper, Thank you for coming",
"Dear Muhammad Ali Yusuf, Thank you for coming",
"Dear Yusuf, Thank you for coming"
};
foreach (var item in strs)
{
var djfdsf = HideName(item);
}
Output:
Dear ****** Jasper, Thank you for coming
Dear ******** *** Yusuf, Thank you for coming
Dear Yusuf, Thank you for coming
References: DotNetFiddle Example, String.Split Method, String.Join method, Enumerable.Select Method, Enumerable.Skip Method, Enumerable.Take Method
add a comment |
You can use String.Split Method, to split your sentence into two parts, then from first part, which contains the word Dear
and your whole name, take only names, mask them, and compose new one.
public string HideName(string str)
{
//First split by comma
var splittedByComma = str.Split(',');
//Then get separate words from splitted array's first part
var words = splittedByComma[0].Split(' ');
//Get names before last name
var name = words.Skip(1).Take(words.Length - 2);
//Replace all chars from first names with '*'
var hiddenPart = string.Join(" ", name.Select(s => new string(s.Select(ch => '*').ToArray())));
//Compose result
var result = string.Format("Dear {0} {1}, {2}", hiddenPart, words.Last(), splittedByComma[1].Trim());
return result;
}
Usage:
var strs = new
{
"Dear Elaine Jasper, Thank you for coming",
"Dear Muhammad Ali Yusuf, Thank you for coming",
"Dear Yusuf, Thank you for coming"
};
foreach (var item in strs)
{
var djfdsf = HideName(item);
}
Output:
Dear ****** Jasper, Thank you for coming
Dear ******** *** Yusuf, Thank you for coming
Dear Yusuf, Thank you for coming
References: DotNetFiddle Example, String.Split Method, String.Join method, Enumerable.Select Method, Enumerable.Skip Method, Enumerable.Take Method
add a comment |
You can use String.Split Method, to split your sentence into two parts, then from first part, which contains the word Dear
and your whole name, take only names, mask them, and compose new one.
public string HideName(string str)
{
//First split by comma
var splittedByComma = str.Split(',');
//Then get separate words from splitted array's first part
var words = splittedByComma[0].Split(' ');
//Get names before last name
var name = words.Skip(1).Take(words.Length - 2);
//Replace all chars from first names with '*'
var hiddenPart = string.Join(" ", name.Select(s => new string(s.Select(ch => '*').ToArray())));
//Compose result
var result = string.Format("Dear {0} {1}, {2}", hiddenPart, words.Last(), splittedByComma[1].Trim());
return result;
}
Usage:
var strs = new
{
"Dear Elaine Jasper, Thank you for coming",
"Dear Muhammad Ali Yusuf, Thank you for coming",
"Dear Yusuf, Thank you for coming"
};
foreach (var item in strs)
{
var djfdsf = HideName(item);
}
Output:
Dear ****** Jasper, Thank you for coming
Dear ******** *** Yusuf, Thank you for coming
Dear Yusuf, Thank you for coming
References: DotNetFiddle Example, String.Split Method, String.Join method, Enumerable.Select Method, Enumerable.Skip Method, Enumerable.Take Method
You can use String.Split Method, to split your sentence into two parts, then from first part, which contains the word Dear
and your whole name, take only names, mask them, and compose new one.
public string HideName(string str)
{
//First split by comma
var splittedByComma = str.Split(',');
//Then get separate words from splitted array's first part
var words = splittedByComma[0].Split(' ');
//Get names before last name
var name = words.Skip(1).Take(words.Length - 2);
//Replace all chars from first names with '*'
var hiddenPart = string.Join(" ", name.Select(s => new string(s.Select(ch => '*').ToArray())));
//Compose result
var result = string.Format("Dear {0} {1}, {2}", hiddenPart, words.Last(), splittedByComma[1].Trim());
return result;
}
Usage:
var strs = new
{
"Dear Elaine Jasper, Thank you for coming",
"Dear Muhammad Ali Yusuf, Thank you for coming",
"Dear Yusuf, Thank you for coming"
};
foreach (var item in strs)
{
var djfdsf = HideName(item);
}
Output:
Dear ****** Jasper, Thank you for coming
Dear ******** *** Yusuf, Thank you for coming
Dear Yusuf, Thank you for coming
References: DotNetFiddle Example, String.Split Method, String.Join method, Enumerable.Select Method, Enumerable.Skip Method, Enumerable.Take Method
edited Nov 22 '18 at 13:05
answered Nov 22 '18 at 12:59
SeMSeM
4,49211629
4,49211629
add a comment |
add a comment |
Well, you could do something along the lines of:
public static string MaskNames(string input)
{
var names = input.Split(new { "Dear ", "," }, StringSplitOptions.RemoveEmptyEntries).First().Split(' ').ToList();
string stringToReplace = names.Any() ? string.Join(" ", names.Take(names.Count - 1)) : null;
if (!string.IsNullOrEmpty(stringToReplace))
{
var maskedNameStr = string.Join(" ", names.Take(names.Count - 1).Select(s => new string('*', s.Length)));
return input.Replace(stringToReplace, maskedNameStr);
}
return input;
}
And the usage:
MaskNames("Dear Elaine ABC Jasper, Thank you for coming**");
MaskNames("Dear Yusuf, Thank you for coming");
add a comment |
Well, you could do something along the lines of:
public static string MaskNames(string input)
{
var names = input.Split(new { "Dear ", "," }, StringSplitOptions.RemoveEmptyEntries).First().Split(' ').ToList();
string stringToReplace = names.Any() ? string.Join(" ", names.Take(names.Count - 1)) : null;
if (!string.IsNullOrEmpty(stringToReplace))
{
var maskedNameStr = string.Join(" ", names.Take(names.Count - 1).Select(s => new string('*', s.Length)));
return input.Replace(stringToReplace, maskedNameStr);
}
return input;
}
And the usage:
MaskNames("Dear Elaine ABC Jasper, Thank you for coming**");
MaskNames("Dear Yusuf, Thank you for coming");
add a comment |
Well, you could do something along the lines of:
public static string MaskNames(string input)
{
var names = input.Split(new { "Dear ", "," }, StringSplitOptions.RemoveEmptyEntries).First().Split(' ').ToList();
string stringToReplace = names.Any() ? string.Join(" ", names.Take(names.Count - 1)) : null;
if (!string.IsNullOrEmpty(stringToReplace))
{
var maskedNameStr = string.Join(" ", names.Take(names.Count - 1).Select(s => new string('*', s.Length)));
return input.Replace(stringToReplace, maskedNameStr);
}
return input;
}
And the usage:
MaskNames("Dear Elaine ABC Jasper, Thank you for coming**");
MaskNames("Dear Yusuf, Thank you for coming");
Well, you could do something along the lines of:
public static string MaskNames(string input)
{
var names = input.Split(new { "Dear ", "," }, StringSplitOptions.RemoveEmptyEntries).First().Split(' ').ToList();
string stringToReplace = names.Any() ? string.Join(" ", names.Take(names.Count - 1)) : null;
if (!string.IsNullOrEmpty(stringToReplace))
{
var maskedNameStr = string.Join(" ", names.Take(names.Count - 1).Select(s => new string('*', s.Length)));
return input.Replace(stringToReplace, maskedNameStr);
}
return input;
}
And the usage:
MaskNames("Dear Elaine ABC Jasper, Thank you for coming**");
MaskNames("Dear Yusuf, Thank you for coming");
edited Nov 22 '18 at 15:05
answered Nov 22 '18 at 13:07
FabjanFabjan
10k21539
10k21539
add a comment |
add a comment |
The method in the snippet below works by first grabbing the first segment of the input string (the part that is left of the comma) then obtaining the supposed first name from the above-mentioned string (which is between the first and last spaces) then masking it. :)
public static string MaskFirstName(string greeting)
{
// make sure there's something to actually work with
if(greeting.Trim() == string.Empty)
{
return string.Empty;
}
string masked = "";
// clean up the input string by removing any leading and trailing white spaces
greeting = greeting.Trim();
// index of the comma
int commaInd = greeting.IndexOf(',');
// get the name of the person
string target = greeting.Substring(0, commaInd);
// index of the first space
int firstSpaceInd = target.IndexOf(' ');
// index of the last space
int lastSpaceInd = target.LastIndexOf(' ');
// The indiviual chars of our target string
char chars = target.ToCharArray();
// replace the characters between the first space and the last space in our target string
for (int i = firstSpaceInd + 1; i != lastSpaceInd; i++)
{
chars[i] = '*';
}
// rebuild our original input string with the masked name
masked = greeting.Replace(target, new string(chars));
return masked;
}
The output of the method above will be something like
input: Dear Muhammad Ali Yusuf, Thank you for coming
output: Dear ************ Yusuf, Thank you for coming
input: Dear Elaine Jasper, Thank you for coming
output: Dear ****** Jasper, Thank you for coming
add a comment |
The method in the snippet below works by first grabbing the first segment of the input string (the part that is left of the comma) then obtaining the supposed first name from the above-mentioned string (which is between the first and last spaces) then masking it. :)
public static string MaskFirstName(string greeting)
{
// make sure there's something to actually work with
if(greeting.Trim() == string.Empty)
{
return string.Empty;
}
string masked = "";
// clean up the input string by removing any leading and trailing white spaces
greeting = greeting.Trim();
// index of the comma
int commaInd = greeting.IndexOf(',');
// get the name of the person
string target = greeting.Substring(0, commaInd);
// index of the first space
int firstSpaceInd = target.IndexOf(' ');
// index of the last space
int lastSpaceInd = target.LastIndexOf(' ');
// The indiviual chars of our target string
char chars = target.ToCharArray();
// replace the characters between the first space and the last space in our target string
for (int i = firstSpaceInd + 1; i != lastSpaceInd; i++)
{
chars[i] = '*';
}
// rebuild our original input string with the masked name
masked = greeting.Replace(target, new string(chars));
return masked;
}
The output of the method above will be something like
input: Dear Muhammad Ali Yusuf, Thank you for coming
output: Dear ************ Yusuf, Thank you for coming
input: Dear Elaine Jasper, Thank you for coming
output: Dear ****** Jasper, Thank you for coming
add a comment |
The method in the snippet below works by first grabbing the first segment of the input string (the part that is left of the comma) then obtaining the supposed first name from the above-mentioned string (which is between the first and last spaces) then masking it. :)
public static string MaskFirstName(string greeting)
{
// make sure there's something to actually work with
if(greeting.Trim() == string.Empty)
{
return string.Empty;
}
string masked = "";
// clean up the input string by removing any leading and trailing white spaces
greeting = greeting.Trim();
// index of the comma
int commaInd = greeting.IndexOf(',');
// get the name of the person
string target = greeting.Substring(0, commaInd);
// index of the first space
int firstSpaceInd = target.IndexOf(' ');
// index of the last space
int lastSpaceInd = target.LastIndexOf(' ');
// The indiviual chars of our target string
char chars = target.ToCharArray();
// replace the characters between the first space and the last space in our target string
for (int i = firstSpaceInd + 1; i != lastSpaceInd; i++)
{
chars[i] = '*';
}
// rebuild our original input string with the masked name
masked = greeting.Replace(target, new string(chars));
return masked;
}
The output of the method above will be something like
input: Dear Muhammad Ali Yusuf, Thank you for coming
output: Dear ************ Yusuf, Thank you for coming
input: Dear Elaine Jasper, Thank you for coming
output: Dear ****** Jasper, Thank you for coming
The method in the snippet below works by first grabbing the first segment of the input string (the part that is left of the comma) then obtaining the supposed first name from the above-mentioned string (which is between the first and last spaces) then masking it. :)
public static string MaskFirstName(string greeting)
{
// make sure there's something to actually work with
if(greeting.Trim() == string.Empty)
{
return string.Empty;
}
string masked = "";
// clean up the input string by removing any leading and trailing white spaces
greeting = greeting.Trim();
// index of the comma
int commaInd = greeting.IndexOf(',');
// get the name of the person
string target = greeting.Substring(0, commaInd);
// index of the first space
int firstSpaceInd = target.IndexOf(' ');
// index of the last space
int lastSpaceInd = target.LastIndexOf(' ');
// The indiviual chars of our target string
char chars = target.ToCharArray();
// replace the characters between the first space and the last space in our target string
for (int i = firstSpaceInd + 1; i != lastSpaceInd; i++)
{
chars[i] = '*';
}
// rebuild our original input string with the masked name
masked = greeting.Replace(target, new string(chars));
return masked;
}
The output of the method above will be something like
input: Dear Muhammad Ali Yusuf, Thank you for coming
output: Dear ************ Yusuf, Thank you for coming
input: Dear Elaine Jasper, Thank you for coming
output: Dear ****** Jasper, Thank you for coming
edited Nov 22 '18 at 13:42
answered Nov 22 '18 at 12:51
C.RaysOfTheSunC.RaysOfTheSun
640127
640127
add a comment |
add a comment |
My contribution:
public string Mask(string sentence)
{
const string mask = "****";
var parts = sentence.Split(',');
var words = parts[0].Split(' ');
var masked = words.Select((w, i) => i == 0 || i == words.Length - 1 ? w : mask);
return string.Join(" ", masked) + "," + parts[1];
}
add a comment |
My contribution:
public string Mask(string sentence)
{
const string mask = "****";
var parts = sentence.Split(',');
var words = parts[0].Split(' ');
var masked = words.Select((w, i) => i == 0 || i == words.Length - 1 ? w : mask);
return string.Join(" ", masked) + "," + parts[1];
}
add a comment |
My contribution:
public string Mask(string sentence)
{
const string mask = "****";
var parts = sentence.Split(',');
var words = parts[0].Split(' ');
var masked = words.Select((w, i) => i == 0 || i == words.Length - 1 ? w : mask);
return string.Join(" ", masked) + "," + parts[1];
}
My contribution:
public string Mask(string sentence)
{
const string mask = "****";
var parts = sentence.Split(',');
var words = parts[0].Split(' ');
var masked = words.Select((w, i) => i == 0 || i == words.Length - 1 ? w : mask);
return string.Join(" ", masked) + "," + parts[1];
}
answered Nov 22 '18 at 14:38
MagnusMagnus
35.9k75590
35.9k75590
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53430646%2fmasks-first-name-of-a-string%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
So
Muhammad Ali
is(are) a first name(s)?– SeM
Nov 22 '18 at 12:08
@SeM In some cases,
Muhammad Ali
can be a first name, yes.– Ahmad
Nov 22 '18 at 12:10
4
So how about grabbing the text between "Dear" and the comma, and removing all words except the last?
– stuartd
Nov 22 '18 at 12:12
This looks like could be solved using regex. Does the text will always have this pattern? "Dear <person>, Thank you for coming"
– Pedro Lima
Nov 22 '18 at 12:12
3
Without knowing what part of the string is actually a "first name" it's simply impossible to do that reliably. All you can do is to try to guess what is it and hope they all follow the same pattern, which is obviously wrong.
– Alejandro
Nov 22 '18 at 12:43