Java 如何在字符串之间添加连字符
我有下面的sting xxxxx,我想添加一个连字符,比如x-xxxx,我如何使用Java来实现它?您可以使用 您只需事先检查,以避免出现“IndexOutOfBoundsException”(索引自动边界异常),但这很明显。您可以执行以下操作:Java 如何在字符串之间添加连字符,java,Java,我有下面的sting xxxxx,我想添加一个连字符,比如x-xxxx,我如何使用Java来实现它?您可以使用 您只需事先检查,以避免出现“IndexOutOfBoundsException”(索引自动边界异常),但这很明显。您可以执行以下操作: String xxx = "xxxxx"; String hyphened = xxx.substring(0,1) + "-" + xxx.substring(1); String orgStr = "xxxxx"; String newStr =
String xxx = "xxxxx";
String hyphened = xxx.substring(0,1) + "-" + xxx.substring(1);
String orgStr = "xxxxx";
String newStr = orgStr.substring(0,1) + "-" + orgStr.substring(1)
String
在Java中是一种不可变的类型,这意味着一旦构建了String
,就不能更改它所表示的字符序列
您可以使用StringBuilder
类的实例来创建String
的新实例,该实例表示原始String
的一些转换。例如,根据您的要求添加连字符,可以执行以下操作:
String str = "xxxxx";
StringBuilder builder = new StringBuilder(str);
builder.insert(1, '-');
String hyphenated = builder.toString(); // "x-xxxx"
StringBuilder
最初包含str
内容的副本;也就是说,“xxxxx”
调用insert
将生成器的内容更改为“x-xxxx”
调用toString
返回一个新的字符串
,其中包含字符串生成器内容的副本
由于String
类型是不可变的,因此对StringBuilder
内容的任何操作都不会更改str
或连字符的内容
您可以通过执行以下操作来更改String
instancestr
引用的内容
而不是
String hyphenated = builder.toString();
但是,str
引用的字符串的内容永远不会更改,因为这是不可能的。相反,str
过去指的是包含“xxxxx”
的实例,现在指的是包含“x-xxxx”
的实例
String in = "ABCDEF";
String out;
然后,任何一个:
out = in.replaceFirst(".", "$0-");
或
或
或
将使out=“A-BCDEF”
以下是另一种方法:
MaskFormatter fmt = new MaskFormatter("*-****");
fmt.setValueContainsLiteralCharacters(false);
System.out.println(fmt.valueToString("12345"));
如果您有一个StringBuilder或StringBuffer,您也可以使用insert:myStringBuilder.insert(1',-)+1用于指出例外可能性。这对我来说并不明显;我的示例不处理一般情况。正则表达式和格式说明符?你的前两个例子对我来说似乎很神秘@伊斯梅:我同意:-)。我认为发布这些不同的方法会对更复杂的替换有用,让读者知道有什么可能性。天哪,我不知道你可以参考$0
。当然有道理,但我从来没有想过。学到了一些新东西,+1@老莱恩。对不可变对象行为的良好描述。
out = in.replaceFirst(".", "$0-");
out = String.format("%1$s-%2$s", in.substring(0,1), in.substring(1));
out = in.substring(0,1) + "-" + in.substring(1);
out = new StringBuilder(in).insert(1, '-').toString();
MaskFormatter fmt = new MaskFormatter("*-****");
fmt.setValueContainsLiteralCharacters(false);
System.out.println(fmt.valueToString("12345"));