Java替换除了每个单词中的第一个和最后一个字符

时间:2013-05-28 21:43:30

标签: java android replaceall

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

示例:

I am walking

要:

I am w_____g

这是否可以使用正则表达式?

2 个答案:

答案 0 :(得分: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_____? 

答案 1 :(得分: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为空的情况。