为什么Java没有指定非转义字符串文字的方法?

时间:2009-03-08 16:41:55

标签: c# java language-comparisons

在C#中,如果你想要字面意思地使用String,即忽略转义字符,你可以使用:

string myString = @"sadasd/asdaljsdl";

然而,在Java中没有相应的东西。有没有什么理由Java没有包含类似的内容?

编辑:

在回顾了一些答案并思考之后,我真正要问的是:
是否有任何令人信服的论据反对将此语法添加到Java?有些消极的,我只是没有看到?

8 个答案:

答案 0 :(得分:5)

Java一直让我觉得它是一种极简主义语言 - 我会想象,因为逐字字符串不是必需的(例如属性),所以它们不包括在内。

例如在C#中,有很多快速的方法可以做属性:

public int Foo { get; set; }

和逐字字符串:

String bar = @"some
string";

Java倾向于避免尽可能多的语法糖。如果你想要一个字段的getter和setter,你必须这样做:

private int foo;

public int getFoo() { return this.foo; }
public int setFoo(int foo) { this.foo = foo; }

和字符串必须转义:

String bar = "some\nstring";

我认为这是因为C#和Java在很多方面都有不同的设计目标。 C#正在迅速发展,不断添加许多功能,但大多数功能往往是语法糖。另一方面,Java是关于简单性和易于理解的。首先创建Java的很多原因都是对C ++语法复杂性的反应。

答案 1 :(得分:2)

我发现有趣的“为什么”问题。 C#是一种较新的语言,并试图改进Java等其他语言中的缺点。 “为什么”问题的简单原因是 - Java标准没有定义@操作符,例如在C#中。

答案 2 :(得分:2)

就像说的那样,大多数时候你想逃脱角色都是正则表达式。在这种情况下使用: Pattern.quote()

答案 3 :(得分:1)

我认为其中一个原因是正则表达式(这是这种字符串文字的一个主要原因),在Java 1.4之前不是Java平台的一部分(如果我没记错的话)。当语言被定义时,根本不需要这样做。

答案 4 :(得分:1)

Java(遗憾的是)没有这样的东西,但是Groovy does

assert '''hello,
world''' == 'hello,\nworld'
//triple-quotes for multi-line strings, adds '\n' regardless of host system
assert 'hello, \
world' == 'hello, world' //backslash joins lines within string

当我做一些.NET工作时,我真的很喜欢C#的这个功能。它对剪切和粘贴的SQL查询特别有用。

答案 5 :(得分:0)

我认为这个问题就像:“为什么java不像Python一样对缩进敏感?” 提到的语法是糖,但它是多余的(多余的)。

答案 6 :(得分:0)

我不知道为什么,但你可以通过逃避逃脱角色来做到这一点。由于所有转义字符都以反斜杠开头,因此通过插入双反斜杠,您可以有效地取消转义字符。例如“\ now”将产生换行符然后字母“ow”但“\ now”将产生“\ now”

答案 7 :(得分:0)

您应该找到IDE为您处理问题。 如果您位于String的中间并将原始文本复制粘贴到其中,它应该为您转义文本。

PERL有更多种方式来设置字符串文字,有时希望Java也支持这些。 ;)