2012-05-09 5 views
1

Допустим, у меня есть следующая строка:Наиболее кратким String.Replace маскировать пароль

"/encryption:aes128 /password:<PASSWORDHERE> /log:log.txt" 

Мне нужно написать это в лог-файл, но пароль должен быть замаскирован (звездочками, например) ,

Я могу сделать это легко с String.IndexOf и String.Replace в нескольких строках кода, но мне интересно узнать, как другие будут реализовывать это, чтобы код был как можно короче и кратким. Лучше всего использовать функцию замены одной строки.

Моя цель состоит в том, чтобы увидеть/изучить некоторые новые методы объединения строковых функций.

Обратите внимание, что меня не интересует использование RegEx.

+0

[Stack Overflow не Форум] (http://meta.stackexchange.com/a/128550/140505) - просить как другие будут делать что-то, не подходит для формата Q & A SE. – Oded

+2

Я никогда не пойму идею желания искусственно сделать что-то в одной строке кода. Примеры, которые я вижу, которые делают их авторов настолько гордыми, почти всегда непонятны. –

+0

@AndrewBarber: Надеюсь, это научное любопытство в большинстве случаев. :) – Guffa

ответ

-2

Вопреки тому, что думает Эндрю Барбер, это прекрасно работает и прекрасно понимается при условии, что существует даже базовая способность читать код. Возможно, вы захотите открыть учебник Энди.

Предполагая:

strArgs = "/encryption:aes128 /password:<PASSWORDHERE> /log:log.txt" 

Тогда:

strArgs = strArgs.Replace(strArgs.Substring(strArgs.IndexOf("/password:") + 10, strArgs.IndexOf(" /log:log.txt") - strArgs.IndexOf("/password:") - 10), "********") 
2

Я не буду показывать вам один лайнер, так как это было бы непостижимо, как уже заметил Андрей.

Вы настаивали на не регулярное выражение подход:

Dim input As String = "/encryption:aes128 /password:htzrj584372 /log:log.txt" 
Dim pwdStart As Integer = input.IndexOf("password:") 
If pwdStart <> -1 Then 
    Dim pwdEnd As Integer = input.IndexOf(" /log:", pwdStart) 
    If pwdEnd <> -1 Then 
     pwdStart += "password:".Length 
     Dim pwdLength = pwdEnd - pwdStart 
     Dim pwd = input.Substring(pwdStart, pwdLength) 
     Dim logText = input.Replace("password:" & pwd, "password:*****") 
    End If 
End If 

Обратите внимание, что он потерпит неудачу, если сам passsword будет содержать /log:. Только часть ранее была замаскирована, так как я не знаю фактическую длину пароля.

Смежные вопросы