Как добавить символы в значение String через определенные промежутки времени в Java - PullRequest
0 голосов
/ 27 января 2019

У меня проблемы с моим кодом ниже. Я строю проект, который требует от пользователя ввода "This is some \"really\" great. (Text)!?", который затем преобразуется в THISISSOMEREALLYGREATTEXT, и значение передается в следующий параметр.затем в моем методе Obify я пытаюсь добавить OB перед каждым гласным AEIOUY, но в моей функции он не делает этого эффективно, он печатает THISISSOMEREALLYGREATTEXT множество раз, и с каждым новым проходом THISISSOMEREALLYGREATTEXT он добавляетв OB в конце, когда мне нужен OB перед каждым гласным, а не только в конце.пожалуйста, покажи мне, где я иду не так, чтобы я мог продолжать прогрессировать.еще раз спасибо заранее, и код для проверки ниже.

import java.util.*;

public class Main {

public static void  main(String[] args) {
    normalizeText();
    obify("THISISSOMEREALLYGREATTEXT" );

}

// Part 1 Normalized Method to convert all letter to uppercase and removing all special characters and placing it into String codey.

public static String normalizeText (){
    Scanner sc = new Scanner( System.in );
    String normText;

    System.out.println("Please input text to encrypt");
    normText = sc.nextLine();

    System.out.println(normText.replaceAll(" ","").replaceAll("[^a-zA-Z ]", "").toUpperCase());


    return normText;


}

//This method will take in the Normalized text and insert a capital O and B in-front of every vowel and return the text
private static String obify (String input) {

    String obifiledInput = input;
    for (int i = 0; i < input.length(); i++) {
        if (input.contains( Character.toString( input.charAt( i ) ) )) {
            obifiledInput = obifiledInput + "OB" + Character.toString( input.charAt( i ) );
        } else {
            obifiledInput = obifiledInput + Character.toString( input.charAt( i ) );
        }
            System.out.println(obifiledInput);
    }
    return obifiledInput;
}
}

Ответы [ 3 ]

0 голосов
/ 27 января 2019

Просто сопоставьте input.charAt (i) со всеми гласными, которые должны работать нормально.Также в вашем коде есть небольшая ошибка: вы инициализировали oblifiedInput с вводом, а затем добавляете OB в эту строку.Даже если ваш цикл for был корректным, он все равно не привел бы к требуемому выводу.

private static String obify (String input) {

   String obifiledInput = "";
   char c;
   for (int i = 0; i < input.length(); i++) {
       c=input.charAt(i);
       if (c=='a' || c=='e' || c=='i' || c=='o' || c=='u') {
           obifiledInput +="OB";
       }
       obifiledInput +=c;
   }
   System.out.println(obifiledInput);
   return obifiledInput;
}
0 голосов
/ 27 января 2019

Не проще ли использовать массив char , передать указанный массив в для каждой структуры, а затем использовать replaceAll​(String regex, String replacement)метод для вашей строки?

Плюс, есть риск того, что 'O' из "OB" будет рассматриваться как еще один гласный код;так что 'O' должен быть первым гласным, который будет проверен.

Это даст что-то вроде строки:

String obifiledInput = input;
ArrayList<Character> vowels = { 'O', 'A', 'E', 'I', 'U', 'Y' };

for (char curr_char : vowels) {
    obifiledInput.remplaceAll( "[" + curr_char + "]", "OB" + curr_char)

    System.out.println(obifiledInput);  
}

return obifiledInput;
0 голосов
/ 27 января 2019

Глядя на вашу obify функцию, я не совсем понимаю, где вы проверяете, является ли Character гласной.Следующий код:

if (input.contains( Character.toString( input.charAt( i ) ) ))

проверяет, содержит ли input символ в определенной позиции в input.Это не совсем решает вашу проблему проверки, является ли письмо гласным.Кроме того, вы устанавливаете obifiledInput на input напрямую, без предварительного просмотра и добавляете OB при необходимости.Чтобы исправить эти проблемы, вы можете попробовать мой код ниже:

private static String obify (String input) {
    String obifiledInput = "";
    for (int i = 0; i < input.length(); i++) {
        char temp = input.charAt(i);
        if (char == 'A' || char == 'E' || char == 'I' || char == 'O' || char == 'U') {
            obifiledInput += "OB" + temp;
        } else {
            obifiledInput += "" + temp;
        }
    }
    return obifiledInput;
}

Я думаю, вы должны найти, что это работает.Он проверяет, является ли символ гласным, ["A", "E", "I", "O", "U"].Затем он добавляет "OB" и символ к obifiledInput.В противном случае он просто добавляет Character.Наконец, он возвращает String, который был «обиден».

...