簡體   English   中英

如何分割字符串,然后編輯字符串,然后將分隔符放回原始位置

[英]How can I split a string then edit the string then place back the delimiters to their original spot

我正在進行Pig Latin項目,該項目要求更改用戶輸入的任何句子以將其翻​​譯為Pig Latin。 我的轉換已經完成,並且可以正常工作。 但是我對標點符號有疑問。 當我分割字符串以處理字符串中的每個單詞時,標點符號會受到影響。 我想知道一種方法,可以將字符串輸入拆分為單個單詞,但保留定界符,然后可以正確放回標點符號和空格?

謝謝

public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    System.out.print("Enter a word or phrase: ");
    String convert = scanner.nextLine();
    String punctuations = ".,?!;";
    //convert = convert.replaceAll("\\p{Punct}+", ""); //idk if this is useful for me 
    String finalSentence = "";
    if (convert.contains(" ")) {
        String[] arr = convert.split("[ ,?!;:.]+");
        for (int index = 0; index < arr.length; index++) {
                if (vowel(arr[index]) == true) {
                    System.out.println(arr[index] + "yay");
                    finalSentence = (finalSentence + arr[index] + "yay ");
                } else {
                    System.out.println(newConvert(arr[index]));
                    finalSentence = (finalSentence + newConvert(arr[index]) + " ");
                }

        } 
  public static void main(String[] args) {
    String convert = "The quick? brown!!fox jumps__over the lazy333 dog.";
    StringBuilder finalSentence = new StringBuilder();
    List<String> tokens = Arrays.asList(convert.split(""));
    Iterator<String> it = tokens.iterator();
    while (it.hasNext()) {
      String token = it.next();
      StringBuilder sb = new StringBuilder();
      while (token.matches("[A-Za-z]")) {
        sb.append(token);
        if (it.hasNext()) {
          token = it.next();
        } else {
          token = "";
          break;
        }
      }
      String word = sb.toString();
      if (!word.isEmpty()) {
        finalSentence.append(magic(word));
      }
      finalSentence.append(token);
    }
    //prints "The1 quick1? brown1!!fox1 jumps1__over1 the1 lazy1333 dog1."
    System.out.println(finalSentence.toString());
  }

  private static String magic(String word) {
    return word + 1;
  }

magic方法完成Pig Latin的翻譯。

我為Pig Latin轉換定義了兩種方法: convert_word_to_pig_latin方法用於將每個單詞轉換為Pig Latin, convert_sentence_to_pig_latin方法用於使用convert_word_to_pig_latin方法的句子。

def convert_word_to_pig_latin(word)
  vowels = "aeiou"
  punctuations = ".,?!'\":;-"

  if vowels.include?(word[0])
    return word
  else
    if punctuations.include?(word[-1])
      punctuation = word[-1]
      word = word.chop
    end
      first_vowel_index = word.chars.find_index { |letter| vowels.include?(letter) }
      new_word = word[first_vowel_index..-1] + word[0...first_vowel_index] + "ay"
      return punctuation ? new_word += punctuation : new_word
  end
end



def convert_sentence_to_pig_latin(sentence)
  sentence_array = sentence.split(" ")
  sentence_array.map { |word| convert_word_to_pig_latin(word) }.join(" ")
end

注意:請隨時添加任何其他標點符號。

最后,這是我的RSpec,以確保我的兩個方法都通過所有測試:

require_relative('../pig_latin')

describe 'Converting single words to Pig Latin' do
  word1 = "beautiful"
  word2 = "easy"
  word3 = "straight"

  it "converts word to Pig Latin" do
    expect(convert_word_to_pig_latin(word1)).to eq "eautifulbay"
  end

  it "does not change word if it begins with a vowel" do
    expect(convert_word_to_pig_latin(word2)).to eq "easy"
  end

  it "converts word to Pig Latin" do
    expect(convert_word_to_pig_latin(word3)).to eq "aightstray"
  end
end

describe 'Converting a sentence to Pig Latin' do
  sentence1 = "Make your life a masterpiece; imagine no limitations on what you can be, have, or do."
  sentence2 = "The pessimist sees difficulty in every opportunity. The optimist sees the opportunity in every difficulty."

  it "converts motivational quote from Brian Tracy to Pig Latin" do
    expect(convert_sentence_to_pig_latin(sentence1)).to eq "akeMay ouryay ifelay a asterpiecemay; imagine onay imitationslay on atwhay ouyay ancay ebay, avehay, or oday."
  end

  it "converts motivational quote from Winston Churchill to Pig Latin" do
    expect(convert_sentence_to_pig_latin(sentence2)).to eq "eThay essimistpay eessay ifficultyday in every opportunity. eThay optimist eessay ethay opportunity in every ifficultyday."
  end
end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM