在跳过空格时使用Java重叠字符串

时间:2015-04-28 02:09:00

标签: java string methods

我想在Java中将两个字符串叠加在一起以创建一个字符串。我已经有办法做这样的事情,但不完全是我想要的。

例如,如果我告诉它将"Hello World"" Hi"重叠,我会得到" Hiorld"

我希望能够将"Hello World"" Hi"重叠,并获得"HelloHiorld"

以下是我目前使用的方法:

public static String overlayString(String str, String overlay, int start, int end) {
          if (str == null) {
              return null;
          }
          if (overlay == null) {
              overlay = "";
          }
          int len = str.length();
          if (start < 0) {
              start = 0;
          }
          if (start > len) {
              start = len;
          }
          if (end < 0) {
              end = 0;
          }
          if (end > len) {
              end = len;
          }
          if (start > end) {
              int temp = start;
              start = end;
              end = temp;
          }
          return new StringBuffer(len + start - end + overlay.length() + 1)
              .append(str.substring(0, start))
              .append(overlay)
              .append(str.substring(end))
              .toString();
      }

如果我希望方法避免用空格替换字符,但仍然保留文本的位置,那么这个方法会怎样?

2 个答案:

答案 0 :(得分:2)

您可以将第一个String放入StringBuffer,使用循环检查第二个String中的哪些字符不是空格,然后使用StringBuffer的.replace()方法替换这些字符。

例如,

StringBuffer sb = new StringBuffer("Hello World");
sb.replace(5, 7, "Hi");

给出"HelloHiorld"

答案 1 :(得分:1)

我可以通过两种方式实现这样的目标......

首先...

public static String overlay1(String value, String with) {
    String result = null;
    if (value.length() != with.length()) {
        throw new IllegalArgumentException("The two String's must be the same length");
    } else {
        StringBuilder sb = new StringBuilder(value);
        for (int index = 0; index < value.length(); index++) {
            char c = with.charAt(index);
            if (!Character.isWhitespace(c)) {
                sb.setCharAt(index, c);
            }
        }
        result = sb.toString();
    }
    return result;
}

允许您传递到相同长度的String并替换所有&#34;非空格&#34;第一个中的第二个内容,比如......

overlay1("Hello World", 
         "      Hi   "));

或者您可以指定要覆盖String的位置,例如......

public static String overlay2(String value, String with, int at) {
    String result = null;
    if (at >= value.length()) {
        throw new IllegalArgumentException("Insert point is beyond length of original String");
    } else {
        StringBuilder sb = new StringBuilder(value);
        // Assuming a straight replacement with out needing to 
        // check for white spaces...otherwise you can use
        // the same type of loop from the first example
        sb.replace(at, with.length(), with);
        result = sb.toString();
    }
    return result;
}

overlay2("Hello World", 
         "Hi", 
         5));