当前位置: 首页 > 知识库问答 >
问题:

字符串变量插值Java[重复]

郑星辰
2023-03-14

Java中的字符串构建让我感到困惑。我不喜欢做这样的事情:

url += "u1=" + u1 + ";u2=" + u2 + ";u3=" + u3 + ";u4=" + u4 + ";";
url += "x=" + u1 + ";y=" + u2 + ";z=" + u3 + ";da1=" + u4 + ";";
url += "qty=1;cost=" + orderTotal + ";ord=" + orderId + "?";

或者,使用StringBuilder,如下所示:

    url.append("u1=");
    url.append(u1);
    url.append(";u2=");
    url.append(u2);
    url.append(";u3=");
    url.append(u3);
    url.append(";u4=");
    url.append(u4);
    url.append(";");
    url.append("x=");
    url.append(u1);
    url.append(";y=");
    url.append(u2);
    url.append(";z=");
    url.append(u3);
    url.append(";da1=");
    url.append(u4);
    url.append(";");
    url.append("qty=1;");
    url.append("cost=");
    url.append(orderTotal);
    url.append(";ord=");
    url.append(orderId);
    url.append("?");

我肯定遗漏了什么。一定有更好的方法。比如:

而不是:

urlString += "u1=" + u1 + ";u2=" + u2 + ";u3=" + u3 + ";u4=" + u4 + ";";

执行:

urlString += Interpolator("u1=%s;u2=%s;u3=%s;u4=%s;", u1, u2, u3, u4);

或:

urlStringBuilder.append(Interpolator("u1=%s;u2=%s;u3=%s;u4=%s;", u1, u2, u3, u4));

共有3个答案

丁高峯
2023-03-14

只是补充一点,还有java.text.MessageFormat具有数字参数索引的好处。

附加留档中的第一个示例

int planet = 7;
String event = "a disturbance in the Force";

String result = MessageFormat.format(
    "At {1,time} on {1,date}, there was {2} on planet {0,number,integer}.",
    planet, new Date(), event);

结果:

At 12:30 PM on Jul 3, 2053, there was a disturbance in the Force on planet 7.
东方方伟
2023-03-14

注意,Java中没有变量插值。变量插值是变量替换,其值在字符串内。Ruby中的一个示例:

#!/usr/bin/ruby

age = 34
name = "William"

puts "#{name} is #{age} years old"

Ruby解释器自动将变量替换为字符串中的值。事实上,我们要做插值是由sigil字符暗示的。在Ruby中,它是#{}。在Perl中,它可以是$、%或@。Java只会打印这样的字符,不会扩展它们。

Java不支持变量插值。相反,我们使用了字符串格式。

package com.zetcode;

public class StringFormatting 
{
    public static void main(String[] args) 
    {
        int age = 34;
        String name = "William";

        String output = String.format("%s is %d years old.", name, age);
    
        System.out.println(output);
    }
}

Java,我们使用String.format()方法构建一个新字符串。结果是一样的,但是方法不同。

看见http://en.wikipedia.org/wiki/Variable_interpolation

编辑截至2019年,JEP 326(原始字符串文字)被撤回,并被多个JEP取代,最终导致JEP 378:以Java 15交付的文本块。

文本块是一种多行字符串文字,它避免了大多数转义序列的需要,以可预测的方式自动格式化字符串,并让开发人员在需要时控制格式。

但是,仍然没有字符串插值:

非目标:…文本块不直接支持字符串插值。插值可在未来的JEP中考虑。同时,新的实例方法String::formatted有助于处理可能需要插值的情况。

嵇弘新
2023-03-14

如果使用Java5或更高,则可以使用String.format

urlString += String.format("u1=%s;u2=%s;u3=%s;u4=%s;", u1, u2, u3, u4);

有关详细信息,请参阅格式化

 类似资料:
  • 问题内容: Java中的字符串构建使我感到困惑。我讨厌做这样的事情: 或者,使用StringBuilder,如下所示: 我肯定会丢失一些东西。有更好的方法。就像是: 代替: 做: 要么: 问题答案: 如果您使用的是Java 5或更高版本,则可以使用: 有关详细信息,请参见。

  • 问题内容: 我想在Python中将变量引入字符串中。 例如,看下面的脚本。我只是想为图像起个名字,例如…到,或者如果您使用会计师,因为我可以替换部分价值链以生成计数器。 问题答案: data = self.cmd(“r.out.gdal in=rdata out=geo{0}.tif”.format(i)) self.dataOutTIF.setValue(“geo{0}.tif”.format(

  • 问题 你想创建一个内嵌变量的字符串,变量被它的值所表示的字符串替换掉。 解决方案 Python并没有对在字符串中简单替换变量值提供直接的支持。 但是通过使用字符串的 format() 方法来解决这个问题。比如: >>> s = '{name} has {n} messages.' >>> s.format(name='Guido', n=37) 'Guido has 37 messages.' >

  • 问题 你想创建一个字符串,让它包含体现某个 CoffeeScript 变量的文本。 解决方案 使用 CoffeeScript 中类似 Ruby 的字符串插值,而不是 JavaScript 的字符串拼接。 插值: muppet = "Beeker" favorite = "My favorite muppet is #{muppet}!" # => "My favorite muppet is B

  • 我只是尝试在HTML中插入从表单中提取的两个值。使用Flask和mysql.connector 这是我的index.html: 和我在python(app.py)中的行: 无论出于什么原因,我在执行第一个游标时会出现内部服务器错误,但“#”游标代码可以正常工作...请问谁能告诉我,我哪里出了问题。

  • 我有下面的字符串,我从打开一个文件得到的,其中包含我们的国家和他们的首都的列表 现在我想解析这个字符串并将其插入到一个映射对象map m=new HashMap()中;但我不知道如何解析/拆分各种元素... 国有资本-----------------------阿拉巴马州蒙哥马利阿拉斯加朱诺亚利桑那州凤凰城阿肯色州小石城加利福尼亚州萨克拉门托科罗拉多州丹佛康涅狄格州哈特福德特拉华州多佛佛罗里达州塔