6

在 C# 中,如果您希望字符串按字面意思理解,即忽略转义字符,您可以使用:

string myString = @"sadasd/asdaljsdl";

但是,Java 中没有等价物。Java没有包含类似的东西有什么原因吗?

编辑:

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

4

8 回答 8

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++ 语法复杂性的反应。

于 2009-03-08T16:45:22.813 回答
2

我觉得“为什么”的问题很有趣。C# 是一种较新的语言,并试图改进其他语言(如 Java)的缺点。“为什么”问题的简单原因是 - Java 标准没有像 C# 中那样定义 @ 运算符。

于 2009-03-08T16:46:47.930 回答
2

就像说的那样,大多数时候你想转义字符是为了正则表达式。在这种情况下使用: Pattern.quote()

于 2009-03-08T17:24:13.690 回答
1

我认为原因之一是正则表达式(这是这类字符串文字的主要原因)直到 Java 1.4 才成为 Java 平台的一部分(如果我没记错的话)。当语言被定义时,根本就没有那么多需要。

于 2009-03-08T16:48:13.977 回答
1

Java(不幸的是)没有这样的东西,但Groovy 有

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 查询特别有用。

于 2009-03-09T17:23:06.443 回答
0

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

于 2009-03-08T16:47:55.197 回答
0

我不确定为什么,但你可以通过转义转义字符来做到这一点。由于所有转义字符前面都有反斜杠,因此通过插入双反斜杠可以有效地取消转义字符。例如 "\now" 将产生一个换行符然后字母 "ow" 但 "\now" 将产生 "\now"

于 2009-03-08T16:49:38.233 回答
0

您应该会发现您的 IDE 可以为您解决问题。如果您在字符串中间并将原始文本复制粘贴到其中,它应该为您转义文本。

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

于 2009-03-08T17:21:03.523 回答