Предоставление текста только определенным переменным в функции Powershell

Ответы, приведенные здесь, являются правильными, но не могут быть вызваны в цикле, потому что объект StyleSpan представляет собой единый непрерывный диапазон (не стиль, который может применяться к нескольким промежуткам). Вызов setSpan несколько раз с тем же жирным шрифтом StyleSpan создаст один жирный диапазон и просто переместит его в родительском диапазоне.

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

private static SpannableStringBuilder emboldenKeywords(final String text,
                                                       final String[] searchKeywords) {
    // searching in the lower case text to make sure we catch all cases
    final String loweredMasterText = text.toLowerCase(Locale.ENGLISH);
    final SpannableStringBuilder span = new SpannableStringBuilder(text);

    // for each keyword
    for (final String keyword : searchKeywords) {
        // lower the keyword to catch both lower and upper case chars
        final String loweredKeyword = keyword.toLowerCase(Locale.ENGLISH);

        // start at the beginning of the master text
        int offset = 0;
        int start;
        final int len = keyword.length(); // let's calculate this outside the 'while'

        while ((start = loweredMasterText.indexOf(loweredKeyword, offset)) >= 0) {
            // make it bold
            span.setSpan(new StyleSpan(Typeface.BOLD), start, start+len, SPAN_INCLUSIVE_INCLUSIVE);
            // move your offset pointer 
            offset = start + len;
        }
    }

    // put it in your TextView and smoke it!
    return span;
}

Имейте в виду, что приведенный выше код недостаточно умен, чтобы пропускать двойное смещение, если одно ключевое слово является подстрокой другого. Например, если вы ищете «Fish fi» внутри «Рыбы в засушливом море» , он сделает «рыбу» полужирным шрифтом один раз и затем "fi" . Хорошо, что пока он неэффективен и немного нежелателен, он не будет иметь визуального недостатка, так как ваш отображаемый результат будет по-прежнему выглядеть как

Рыбы в засушливом море

0
задан C. Kolchak 13 July 2018 в 18:10
поделиться

2 ответа

Для выражения , такого как "gr-" + $InputObject.alias, которое должно быть распознано как один (один, оцененный) аргумент команды , вы должны заключить его в (...):

New-UnifiedGroup -Alias ("gr-" + $InputObject.alias) ...

В качестве альтернативы используйте строку "..." с интерполяцией строки string (расширение строки):

New-UnifiedGroup -Alias "gr-$($InputObject.alias)" ...

Обратите внимание на необходимость заключить вложенные $InputObject.alias выражение в $(...) (которое не требуется для простых ссылок на переменные , например "I'm $HOME" - см. этот ответ для обзора правила расширения строки).

1
ответ дан mklement0 17 August 2018 в 12:16
поделиться

Как насчет

New-UnifiedGroup -Alias $("gr-$InputObject.alias") `
    -DisplayName $("gr-$InputObject.displayname") `
    -Members $InputObject.members.recipients.value `
    -PrimarySmtpAddress $InputObject.emailaddresses.value `
0
ответ дан Theo 17 August 2018 в 12:16
поделиться
  • 1
    Вам не нужно (и не следует использовать) $(...) вокруг строки с двумя кавычками, но вам нужно ее вокруг выражений внутри такой строки (расширяемой); например: "gr-$($InputObject.alias)" – mklement0 13 July 2018 в 19:40
  • 2
    Фантастика! & Quot; г - $ ($ inputobject.alias) & Quot; работал как шарм. Спасибо! – C. Kolchak 13 July 2018 в 20:10
Другие вопросы по тегам:

Похожие вопросы: