在运行时更改字符串

时间:2017-12-28 07:46:00

标签: java string

我想在运行时对字符串进行一些更改。在下面的代码中,我试图更改int变量<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output indent="yes"/> <xsl:template match="/*"> <xsl:copy> <xsl:apply-templates select="Number | Date"/> <Description> <xsl:apply-templates select="DocumentItems/Item/SourceDoc/Number"/> </Description> </xsl:copy> </xsl:template> <xsl:template match="Number"> <DocumentNumber> <xsl:apply-templates/> </DocumentNumber> </xsl:template> <xsl:template match="Date"> <DocumentDate> <xsl:apply-templates/> </DocumentDate> </xsl:template> <xsl:template match="SourceDoc/Number"> <xsl:if test="position() > 1">, </xsl:if> <xsl:apply-templates/> </xsl:template> </xsl:stylesheet> ,以便字符串s也会改变。

我认为结果是这样的:

count

但在这两种情况下都有0:

You have invited 0 users.
You have invited 5 users.

你能解释一下为什么我的想法不起作用,我该怎么办才能使它发挥作用?

You have invited 0 users.
You have invited 0 users.

6 个答案:

答案 0 :(得分:4)

字符串是不可变的,因此当您使用count = 5;时,实际上您并未更改s。要进行更改,您必须使用:

count = 5;
s = "You have invited " + count + " users.";
System.out.println(s);

答案 1 :(得分:4)

您可以创建一个访问者方法,例如getter,并使count成为实例变量:

private int count = 0;

private String getString(){
    return "You have invited " + this.count + " users.";
}

然后可以像这样调用:

System.out.println(getString()); // prints: You have invited 0 users.
this.count = 5;
System.out.println(getString()); // prints: You have invited 5 users.

这是因为就像在 @YCF_L 中已经说过的那样,答案Strings是不可变的。这意味着一旦创建了字符串。它无法改变。唯一的方法是使用新的String覆盖它(它仍然不会更改值,但只会将变量s的引用更改为新字符串)

答案 2 :(得分:3)

字符串是不可变的。每次,您对现有字符串进行任何更改,都需要重新分配,以反映更改。在您的情况下,您已更改计数变量。但是,在更改它之后,您需要将字符串重新分配给变量s。或者,简单来说,您需要使用count变量创建新字符串并将其分配给某个变量,即在您的情况下,它是s

答案 3 :(得分:3)

正如其他人所述,您对count的修改不会改变s的价值。

您可以做的是使用String.format(String , Object...)

static final String s = "You have invited %d users.";

// then later...

System.out.println(String.format(s, count));

答案 4 :(得分:0)

虽然 计数 已更改,但 s 未更改,并且一直是“您已邀请0个用户。“

1.int count 是基本数据类型变量。

2.即使 count 是引用类型,String也是不可变的,除非重新赋值。

static int count;

static String s = "You have invited " + count + " users.";

public static void main(String[] args) {

    System.out.println(s);
    count = 5;
    s = "You have invited " + count + " users.";

    System.out.println(s);

}

答案 5 :(得分:-2)

static int count;

public static void main(String[] args) {
    printCount();        
    count = 5;
    printCount();
}

public static void printCount() {
    System.out.println("You have invited " + count + " users.");
}