【问题标题】:Java concatenation not workingJava连接不起作用
【发布时间】:2017-02-08 12:26:03
【问题描述】:

此代码应获取绝对路径,附加首选项文件中的字符串,然后附加“.json”以匹配必要的文件。我尝试使用“+”来连接字符串,但它给出的输出与 StringBuilder.append()

    StringBuilder pt= new StringBuilder(path);
    pt.append(System.getProperty("file.separator"));
    pt.append("lib");
    pt.append(System.getProperty("file.separator"));
    pt.append("ling");
    pt.append(System.getProperty("file.separator"));
    String lingua =PrefManager.getPref("lingua")+("=");
    System.out.println(lingua);
    pt.append(lingua);
    System.out.println("com extensão"+pt.toString());
    String file = pt.toString();
    System.out.println(file);
    System.out.println(file);
    Object obj = parser.parse(new FileReader(file));

这是我的控制台输出:

=t-br
=om extensão/home/mateus/BrinoBuildScript/Filesx64/lib/ling/pt-br
=home/mateus/BrinoBuildScript/Filesx64/lib/ling/pt-br
=home/mateus/BrinoBuildScript/Filesx64/lib/ling/pt-br
java.io.FileNotFoundException: /home/mateus/BrinoBuildScript/Filesx64/lib/ling/p= (No such file or directory)

一个变量怎么能有三个不同的输出到控制台?我应该怎么做才能解决这个问题?

【问题讨论】:

  • 为什么会有三种不同的输出?您期望哪种输出?
  • 输出是相同的,除了您在该变量的第一个输出中预先设置的“com extensão”文本...
  • 另外你从来没有附加 .json 或者你期望什么?
  • 我没有得到你的输出,com extensão=om extensão 一样打印(就像每一行一样),然后在 lingua 中,最后一个字符 (=) 消失。但对于其余的,对我来说似乎没问题(从我阅读的代码中)
  • Mateus,如果您允许,请避免使用带有葡萄牙语特殊字符的文件和文件夹,例如 ãoíç 等等。与名称包含空格的文件和文件夹相同......这只会给我们,开发人员带来麻烦。请试试这个并说出会发生什么。然而:也不要在 var 名称、函数名称、类和方法中使用这些字符。来自巴西的问候。

标签: java string concatenation string-concatenation


【解决方案1】:

马特乌斯。您的控制台输出正在打印第一列上该行的最后一个字符。正确渲染后,您的控制台输出应如下所示:

pt-br=
com extensão\home\mateus\BrinoBuildScript\Filesx64\lib\ling\pt-br=
\home\mateus\BrinoBuildScript\Filesx64\lib\ling\pt-br=
\home\mateus\BrinoBuildScript\Filesx64\lib\ling\pt-br=

在此输出中,您可以看到字符串 file 已正确设置(尽管您可能不打算使用尾随 '=')。

虽然您小心使用系统路径分隔符,但连接有点笨拙。如果您使用的是旧版本的 Java,您可以尝试使用 File 类来编写路径:

final String path = "\\home\\mateus\\BrinoBuildScript\\Filesx64";
final File libFolder = new File(path, "lib");
final File lingFolder = new File(libFolder, "ling");
final File languageFolder = new File(lingFolder, PrefManager.getPref("lingua"));
System.out.println(languageFolder.getAbsolutePath());

如果您使用的是最新版本的 Java,则可以使用 Paths API(它确实处理特定于平台的路径分隔符):

final Path p = Paths.get(path, "lib", "ling", PrefManager.getPref("lingua"));
System.out.println(p);

在此处查看有关 Paths API 的 Java 教程:

https://docs.oracle.com/javase/tutorial/essential/io/pathOps.html

【讨论】:

  • 谢谢,将看看路径 API。我设法用 string.format("%s.%s") 连接 .json
猜你喜欢
  • 2017-11-13
  • 2019-10-10
  • 2014-05-15
  • 2019-08-11
  • 1970-01-01
  • 2020-12-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-06
相关资源
最近更新 更多