ломая любую строку - PullRequest
       2

ломая любую строку

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

Привет, ребята. Я занят разбиванием / расщеплением струн. Однако строка не является фиксированной, поэтому при изменении ввода программа все равно должна работать с любым вводом символов.

До сих пор я зашел так далеко, но заблудился.

Я создал массив символов и установил размер массива, равный длине любой строки, которая будет получена в качестве входных данных. Я сделал цикл for, чтобы перебрать символы строки.

как мне теперь вставить мою строку в массив, потому что я знаю, что моя строка еще не там? Затем, когда он, наконец, перебирает символы моей строки, нужно распечатать числа и операнды на разных строках. Таким образом, результат будет выглядеть в этом случае следующим образом;

1

+

3

432

.

123

и т.д.

Я хочу сделать это без использования средств сопоставления, сканера и т. Д. Я хочу использовать базовые методы Java, которые вы изучили в первых 3 главах HeadfirstJava.

public class CharAtExample {

public static void main(String[] args) {

    // This is the string we are going to break down
    String inputString = "1+3,432.123*4535-24.4";

    int stringLength = inputString.length();    

    char[] destArray = new char[stringLength];{

        for (int i=0; i<stringLength; i++);
    }

Ответы [ 4 ]

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

Это проще, чем вы думаете.

Во-первых: чтобы получить массив с символами вашей строки, вы просто используете метод toCharArray(), который есть во всех строках.
отл.myString.toCharArray()

Второе: когда вы видите, что символ не является числом, вы хотите перейти к следующей строке, распечатать символ и затем снова перейти к следующей строке.

Следующий код делает именно это:

public class JavaApplication255 {


public static void main(String[] args) {

    String inputString = "1+3,432.123*4535-24.4";   

    char[] destArray = inputString.toCharArray();

    for (int i = 0 ; i < destArray.length ; i++){
        char c = destArray[i];

        if (isBreakCharacter(c)){
            System.out.println("\n" + c);
        } else {
            System.out.print(c);
        }

    }
}

public static boolean isBreakCharacter(char c){
    return c == '+' || c == '*' || c == '-' || c == '.' || c == ',' ;
} 
0 голосов
/ 12 сентября 2018

Вот возможное решение, где мы идем символ за символом и либо добавляем к существующей строке, которая будет нашими числами, либо добавляет строку в массив, очищает текущее число и затем добавляет специальные символы. Наконец, мы перебираем массив столько раз, сколько находим числового или нецифрового символа. Я использовал таблицу ASCII, чтобы идентифицировать символ как цифру, эта таблица пригодится вам на протяжении всей вашей карьеры программиста. Наконец, я изменил массив на массив строк, потому что символ не может содержать числа типа «432», только «4» или «3» или «2».

String inputString = "1+3,432.123*4535-24.4";

int stringLength = inputString.length();    

String[] destArray = new String[stringLength];
int destArrayCount = 0;
String currentString = "";
for (int i=0; i<stringLength; i++)
{
    //check it's ascii value if its between 0 (48) and 9 (57)
    if(inputString.charAt(i) >= 48 && inputString.charAt(i) <= 57 )
    {
        currentString += inputString.charAt(i);
    }
    else
    {
        destArray[destArrayCount++] = currentString;
        currentString = "";
        //we know we don't have a number at i so its a non-number character, add it
        destArray[destArrayCount++] = "" + inputString.charAt(i);
    }
}
//add the last remaining number
destArray[destArrayCount++] = currentString;

for(int i = 0; i < destArrayCount; i++)
{
    System.out.println("(" + i + "): " + destArray[i]);
}

ВАЖНО - Этот алгоритм не будет работать, если используется определенный тип String. Можете ли вы найти строку, где этот алгоритм не работает? Что вы можете сделать, чтобы счет всегда был правильным, а иногда не на 1 больше, чем фактический счет?

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

Вы можете использовать Character.isDigit(char) для различения числовых и не числовых символов, поскольку фактически это единственный критерий для группировки нескольких символов в одной строке.
Это даст:

public static void main(String[] args) {

    String inputString = "1+3,432.123*4535-24.4";
    String currentSequence = "";

    for (int i = 0; i < inputString.length(); i++) {

        char currentChar = inputString.charAt(i);
        if (Character.isDigit(currentChar)) {
            currentSequence += currentChar;
            continue;
        }
        System.out.println(currentSequence);
        System.out.println(currentChar);
        currentSequence = "";
    }

    // print the current sequence that is a number if not printed yet
    if (!currentSequence.equals("")) {
         System.out.println(currentSequence);
    }

}

Character.isDigit() полагается на категорию Unicode.
Вы можете кодировать его самостоятельно, например:

if (Character.getType(currentChar) == Character.DECIMAL_DIGIT_NUMBER) {...}

Или вы можете кодировать его все еще на более низком уровне, проверив, что значение int для char равновходит в диапазон ASCII десятичных значений для чисел:

if(currentChar >= 48 && currentChar <= 57 ) {

Выводит то, что вы хотите:

1

+

3

,

432

.

123

*

4535

-

24

.

4

0 голосов
/ 12 сентября 2018
char[] charArray = inputString.toCharArray();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...