从右边开始,在Java字符串中每8个字符后插入一个(短划线/减号字符)的最佳方法是什么-?
例子:
1111 -> 1111
111111111 -> 1-11111111
1111111111111111 -> 11111111-11111111
100001111111111111111 -> 10000-11111111-11111111
我的尝试,表明我自己尝试过这样做(下面的评论问:"这是这个功课吗?":
import junit.framework.TestCase;
public class InsertCharacterAfterEveryNCharacters extends TestCase {
  public static String insertSpacerAfterNCharactersFromTheRight(char spacer,
      int spacing, String string) {
    final int length = string.length();
    final int newStringCapacity = length + (int) Math.ceil(length / (double) spacing);
    StringBuilder stringBuilder = new StringBuilder(newStringCapacity);
    for (int i = length - 1; i >= 0; i--) {
      stringBuilder.append(string.charAt(i));
      if (i % spacing == 0 && i > 0) {
        stringBuilder.append(spacer);
      }
    }
    return stringBuilder.toString();
  }
  public static void testInsertSpacerAfterNCharactersFromTheRight() {
    assertEquals("", insertSpacerAfterNCharactersFromTheRight('-', 8, ""));
    assertEquals("1", insertSpacerAfterNCharactersFromTheRight('-', 8, "1"));
    assertEquals("11", insertSpacerAfterNCharactersFromTheRight('-', 8, "11"));
    assertEquals("11111111",
        insertSpacerAfterNCharactersFromTheRight('-', 8, "11111111"));
    assertEquals("1-11111111",
        insertSpacerAfterNCharactersFromTheRight('-', 8, "111111111"));
    assertEquals("11111111-11111111",
        insertSpacerAfterNCharactersFromTheRight('-', 8, "1111111111111111"));
  }
}
ar3*_*34z 30
所有答案似乎都需要做很多代码.您可以使用正则表达式来执行此操作.
假设您有一个返回格式化字符串的方法.
一个简单明了的例子:
String myString = "00000000000111111111111100000000001111111000011000000";
String newString = myString.replaceAll("(.{8})(?!$)", "$1-");
return newString;
以上等于以下较短的符号:
return myString.replaceAll("(.{8})(?!$)", "$1-");
另一个类似的简短表示法(如果是固定的硬编码字符串):
return "00000000000111111111111100000000001111111000011000000".replaceAll("(.{8})(?!$)", "$1-");
每段代码都会重新生成以下字符串:
00000000-00011111-11111111-00000000-00111111-10000110-00000
有关正则表达式的更多信息,请参阅http://www.regular-expressions.info/java.html
希望这对未来的任何人都有帮助.
编辑注释:最后一组不包含8个字符.但是,如果可以,它将不会添加另一个破折号.
pb2*_*b2q 16
char[]从原来建立一个String:
String str = "100001111111111111111";
// add enough space for an additional "-" for every 8 chars:
char[] chars = new char[str.length() + (str.length() / 8)];
// this offset will give us the first "-" position from the LEFT:
int offset = str.length() % 8;
int idx = 0, strIdx = 0;
for (; strIdx < str.length(); idx++, strIdx++)
{
    if (((strIdx % 8) == offset) && (strIdx != 0))
        chars[idx++] = '-';
    chars[idx] = str.charAt(strIdx);
}
String str2 = new String(chars);
System.out.println(str2);
或者您可以使用a StringBuilder,这可能涉及(length / 8)数组复制操作:
StringBuilder str = new StringBuilder("100001111111111111111");
int idx = str.length() - 8;
while (idx > 0)
{
    str.insert(idx, "-");
    idx = idx - 8;
}
System.out.println(str.toString());
两种情况下的输出:
10000-11111111-11111111
请注意,这不会在索引处插入连字符0,如果需要,您需要调整代码.
| 归档时间: | 
 | 
| 查看次数: | 26549 次 | 
| 最近记录: |