2016-02-11 59 views
0

我正在研究Pig拉丁項目,該項目需要更改用戶輸入的任何句子以便將其翻譯爲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]) + " "); 
       } 

     } 
+0

這主要是你想用來代表解析句子什麼樣的結構的問題。 –

+0

你是什麼意思? – Raph

+0

那麼,你的問題在於你有一個通過分割一些較大的字符串獲得的單詞列表,但這些單詞在其中有標點符號。你可以通過刪除所有的標點符號來解決這個問題,但是你最終無法得到它。因此,您需要一種方法來表示數據結構中原始字符串的所有信息,這些信息比簡單的字符串更易於使用。 –

回答

0
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方法豬拉丁語翻譯。

0

我定義的豬拉丁語翻譯方法有兩種:convert_word_to_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 
相關問題