【问题标题】:Java: Use an input/argument as a variable when variable could be in one of multiple inputs/argumentsJava:当变量可能位于多个输入/参数之一时,使用输入/参数作为变量
【发布时间】:2013-10-28 23:51:11
【问题描述】:

我有一个 java 程序,它从文件内容中提取日期,然后用该日期字符串重命名文件。我需要考虑的是,新文件名最终可能会在开头、中间或结尾处包含日期。我试图做的是这样的 -

String outputFilePt1 = args[0];
String outputFilePt2 = args[1];
String outputFilePt3 = args[2];

String outputDate = dateFormat.format( date );
String newOutputFile = outputFilePt1 + outputFilePt2 + outputFilePt3;

然后我会分别为 args 0-2 输入类似“MyFile_”、“outputDate”、“.csv”的内容,希望结果是 MyFile_outputDatesValue.csv - 因为我可能需要它是 MyFile.csv_outputDatesValue

完成 3 个输入(FilePart1、FilePart2、FilePart3)的最佳方法是什么?在上面的代码块中,最终会得到“outputDate”的值?

提前致谢,我希望我所问的有道理!

编辑 - 我在输入参数时不知道“outputDate”的值。这是根据输入文件和确定输入文件的日期格式/位置的配置/属性文件计算得出的。

【问题讨论】:

  • hmmm... "MyFile" + ".csv" + "_outputDatesValue" ?
  • 如果你的方法显示签名
  • 谢谢,很遗憾我不知道参数输入时的值。所以我需要能够输入一个变量名,比如“outputDate”。然后,如果我输入 arg0="MyFile_" arg1="outputDate" arg2=".csv" 我的字符串的结果是 MyFile_xxxxx.csv - 其中“xxxxx”实际上是在我的 outputDate 变量中计算的值。
  • 你不能按照 aluxa 上面的建议做吗?也许可以根据需要更改格式 - 即String newOutputFile = outputFilePt1 + outputDate + outputFilePt3; 或类似名称。如果值是在方法本身中设置的,则不需要将参数传递给方法。
  • Germann,谢谢,唯一的问题是我不知道输入参数时的值。因此,我希望我可以输入 outputDate 作为参数之一的值,但如果我这样做,它会按字面意思打印,即“MyFile_outputDate.csv”。如果我不能这样做,下一步是解析每个输入参数以查找日期,并相应地格式化我的最终文件名字符串。

标签: java variables input args


【解决方案1】:

看看boolean String.matches(String regexp) 方法。您可以像在这篇文章中那样解析它:Regex date format validation on Java,找出哪一行 arg 是日期,然后我认为构建一个合适的字符串会很容易。

【讨论】:

  • 谢谢,vanomat。在这种情况下,我不想输入日期格式或实际值。我在配置文件中使用 simpleDateFormat 定义日期格式,所以我想要传递的只是“outputDate”。显然,它只是不能以这种方式工作。为了做我想做的事,我基本上只是要求其中一个参数是“thedate”——然后我根据“thedate”评估 FilePt1、FilePt2 和 FilePt3,并将 outputDate 分配给包含“thedate”的参数.这正是我所需要的,只是不完全是我所希望的!不过谢谢!
【解决方案2】:

基本上,我最终采用的方法只是为我想要日期的 FilePart 接受一个像“thedate”这样的静态字符串,然后用包含它的变量替换文件名字符串中的“thedate”,像这样 -

String outputFilePt1 = args[0];
String outputFilePt2 = args[1];
String outputFilePt3 = args[2];

String outputDate = dateFormat.format( date );
newOutputFile = newOutputFile.replaceAll("thedate", outputDate);

感谢所有关注和思考此问题的人!我的问题的真正答案是“你不能完全按照你的意愿去做”——基本上你必须转换输入,或者按照上面的方法替换它。在提出这个解决方案之前,我基本上已经完成了 -

String outputFilePt1 = args[0];
String outputFilePt2 = args[1];
String outputFilePt3 = args[2];
String lookingFor = "thedate";

if (outputFilePt1.equals(lookingFor))
{
    outputFilePt1 = outputDate;
}
if (outputFilePt2.equals(lookingfor))
{
    outputFilePt2 = outputDate;
}
if (outputFilePt2.equals(lookingfor))
{    
    outputFilePt3 = outputDate;
}

String outputDate = dateFormat.format( date );

显然,替换我的“thedate”字符串更可取!

再次感谢。

【讨论】:

    猜你喜欢
    • 2018-11-23
    • 1970-01-01
    • 1970-01-01
    • 2021-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-06
    • 1970-01-01
    相关资源
    最近更新 更多