[英]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.