2016-02-11 50 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 
相关问题