Java заменяет хештеги в строке на целое с дополнительными нулями - PullRequest
0 голосов
/ 24 сентября 2018

У меня есть заданный шаблон имени файла, сохраненный в переменной String, например: "fileno####save.txt"

У меня есть число от 1 до 9999, сохраненное в переменной int.

Если мой номер 2, я хотел бы получить: "fileno0002save.txt"

Если мой номер 23, я хотел бы получить: "fileno0023save.txt"

Если мой номер 121, я хотел бы получить: "fileno0121save.txt"

Если мой номер 2021, я хотел бы получить: "fileno2021save.txt"

Давайте посмотримэто с немного другим шаблоном: "######fileno.txt"

Если мой номер 2, я хотел бы получить: "000002fileno.txt"

Если мой номер 23, я 'Я хотел бы получить: "000023fileno.txt"

Если мой номер 121, я хотел бы получить: "000121fileno.txt"

Если мой номер 2021, я хотел бы получить: "002021fileno.txt"

Длина целого числа никогда не станет больше, чем длина хэштегов, поэтому нам не нужно с этим сталкиваться, так как я уже написал исключение для этого.Длина части хештега в строке, с которой мне приходится иметь дело, составляет от 2 до 10 символов.

Ответы [ 4 ]

0 голосов
/ 24 сентября 2018

Вы можете сделать что-то вроде этого:

String format = "fileno####save.txt";
int num = 2;

int numberOfHash = format.length() - format.replace("#", "").length();

String hashes = format.substring(format.indexOf("#"), format.indexOf("#") + numberOfHash);

String paddedString = String.format(format.replace(hashes, "%0" + numberOfHash + "d"), num);

System.out.println(paddedString); // fileno0002save.txt
0 голосов
/ 24 сентября 2018

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

0 голосов
/ 24 сентября 2018

приведенный ниже пример работает;адаптируйте его к своим потребностям, например, разделив шаги «прочитать шаблон» и «применить шаблон».

import java.util.regex.*;

class Main {
    public static void main(String[] args) {
        Pattern HASHES = Pattern.compile("^(.*?)(#+)(.*)$");

        // read the template
        String pattern = "abc####foo.txt";

        Matcher m = HASHES.matcher(pattern);
        if (!m.matches()) throw new IllegalArgumentException("Invalid template");
        int len = m.group(2).length();
        String prefix = m.group(1);
        String suffix = m.group(3);

        // apply the template
        int input = 12;

        String f = prefix + String.format("%0" + len + "d", input) + suffix;
        System.out.println(f);
    }
} 
0 голосов
/ 24 сентября 2018

Для заполнения вы можете использовать что-то вроде этого:

int maxHashes=10;
int myInt = 11;
String lpadPadStr = String.format("%1$" + maxHashes + "s", myInt).replace(' ', '0');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...