-3

我想要完成的是将句子替换为下划线,但单词中的第一个和最后一个字符除外。

例子:

I am walking

至:

I am w_____g

这可以用正则表达式吗?

4

2 回答 2

0

这个答案应该有效,将来在您的问题中更详细一点,并告诉我们您尝试了什么,人们更愿意提供帮助;)

public static void main(String[] args) {
    System.out.println(replaceAll("Hello", '_'));

    String sentence = "Hello Mom What Is For Dinner?";
    StringBuilder sentenceReformed = new StringBuilder();

    for (String word : sentence.split(" ")) {
        sentenceReformed.append(replaceAll(word, '_'));
        sentenceReformed.append(" ");
    }

    System.out.println(sentenceReformed);
}

public static String replaceAll(String word, char replacer) {
    StringBuilder ret = new StringBuilder();
    if (word.length()>2) {
        ret.append(word.charAt(0));
        for (int i = 1; i < word.length() - 1; i++) {
            ret.append(replacer);
        }
        ret.append(word.charAt(word.length() - 1));
        return ret.toString();
    }

    return word;
}

出去:

H__o
H___o M_m W__t Is F_r D_____? 
于 2013-05-28T21:54:17.120 回答
0

我认为您可以通过查看匹配开始和结束的位置来使用正则表达式来做到这一点。但是,在这种情况下,正则表达式似乎是多余的。分配一个新的字符数组更简单,将输入的第一个和最后一个字符复制到该数组,并用下划线填充中间,然后从该字符数组分配一个字符串,如下所示:

public class ReplaceMiddle {

public static String replaceMiddle (String s) {
  char[] c = new char[s.length()];

  c[0] = s.charAt(0);

  for (int i = 1; i < s.length() - 1; i++) {
    c[i] = '_';
  }

  c[s.length() - 1] = s.charAt(s.length() - 1);

  return new String(c);

}

public static void main(String[] argv) {
   System.out.println( ReplaceMiddle.replaceMiddle("I want a pumpkin."));
}

}

输出:

I_______________.

请注意,这不处理零长度字符串,或 s 为空的情况。

于 2013-05-28T22:09:21.007 回答