Java; Строковая замена (использующий регулярные выражения)?

Подход, ищущий те же элементы, что и у нового элемента, подсчитывающий и проверяющий в соответствии с требуемым максимумом и подталкивающий либо к фактическому индексу (если счет меньше), либо к следующему элементу (если в начале или больше, чем требуемый счет) ).

этот подход берет массив с элементами и добавляет каждый элемент, ища ситуацию container.

function addFruit(fruit) {
    const 
        addFruits = (s, v) => s + +(v === fruit),
        max = { apple: 3, mango: 2, stawberry: 4, default: Infinity };

    var i = 0;

    while (i < container.length) {
        if (container[i].reduce(addFruits, 0) < (max[fruit] || max.default)) break;
        i++;
    }
    container[i] = container[i] || [];
    container[i].push(fruit);
}


var data = ["apple", "apple", "mango", "stawberry", "banana", "mango", "stawberry", "banana", "apple", "apple", "stawberry", "banana", "apple", "mango", "stawberry", "stawberry", "stawberry", "banana", "stawberry"],
    container = [];

data.forEach(addFruit);

console.log(container);
.as-console-wrapper { max-height: 100% !important; top: 0; }

114
задан Tim 16 September 2012 в 15:44
поделиться

6 ответов

str.replaceAll("\\^([0-9]+)", "<sup>$1</sup>");
159
ответ дан Can Berk Güder 24 November 2019 в 02:33
поделиться
import java.util.regex.PatternSyntaxException;

// (:?\d+) \* x\^(:?\d+)
// 
// Options: ^ and $ match at line breaks
// 
// Match the regular expression below and capture its match into backreference number 1 «(:?\d+)»
//    Match the character “:” literally «:?»
//       Between zero and one times, as many times as possible, giving back as needed (greedy) «?»
//    Match a single digit 0..9 «\d+»
//       Between one and unlimited times, as many times as possible, giving back as needed (greedy) «+»
// Match the character “ ” literally « »
// Match the character “*” literally «\*»
// Match the characters “ x” literally « x»
// Match the character “^” literally «\^»
// Match the regular expression below and capture its match into backreference number 2 «(:?\d+)»
//    Match the character “:” literally «:?»
//       Between zero and one times, as many times as possible, giving back as needed (greedy) «?»
//    Match a single digit 0..9 «\d+»
//       Between one and unlimited times, as many times as possible, giving back as needed (greedy) «+»
try {
    String resultString = subjectString.replaceAll("(?m)(:?\\d+) \\* x\\^(:?\\d+)", "$1x<sup>$2</sup>");
} catch (PatternSyntaxException ex) {
    // Syntax error in the regular expression
} catch (IllegalArgumentException ex) {
    // Syntax error in the replacement text (unescaped $ signs?)
} catch (IndexOutOfBoundsException ex) {
    // Non-existent backreference used the replacement text
}
10
ответ дан BigGinDaHouse 24 November 2019 в 02:33
поделиться

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

, Если единственные замены - те, Вы показали, дело не в этом трудно, чтобы сделать. Сначала разделите *, тогда используйте получение, любят, Может Болван, которого GГјder показал для обработки ^.

3
ответ дан Michael Myers 24 November 2019 в 02:33
поделиться

Каков Ваш многочлен? Если бы Вы "обрабатываете" его, я предполагаю своего рода дерево подвыражений, сгенерированных в какой-то момент, и думал бы, что будет намного более просто использовать это для генерации строки, чем повторно проанализировать необработанное выражение с regex.

Просто бросок другого образа мыслей там. Я не уверен, что еще продолжается в Вашем приложении.

3
ответ дан Adam Jaskiewicz 24 November 2019 в 02:33
поделиться

Вы захотите изучить получение в regex для обработки обертывания 3 в ^3.

0
ответ дан Ryan Graham 24 November 2019 в 02:33
поделиться

Попробуйте это:

String str = "5 * x^3 - 6 * x^1 + 1";
String replacedStr = str.replaceAll("\\^(\\d+)", "<sup>\$1</sup>");

убедиться импортировать java.util.regex.

0
ответ дан cdmckay 24 November 2019 в 02:33
поделиться
Другие вопросы по тегам:

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