java 有条件生成文件名的UDF

qij5mzcb  于 2023-06-20  发布在  Java
关注(0)|答案(1)|浏览(97)

我想根据条件动态传递文件名。我已经写了下面的代码,但文件名没有得到通过。我想如果条件可能有点问题。

DynamicConfiguration conf = (DynamicConfiguration) container.getTransformationParameters().get(StreamTransformationConstants.DYNAMIC_CONFIGURATION);
DynamicConfigurationKey key = DynamicConfigurationKey.create("http://sap.com/xi/XI/System","FileName");

//get current timestamp and reformat
Date date = new Date();
DateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");

//define filename
String filename = new String("");
if (orgid == "G"||"ZG"||"S")
{
filename = "N_" + df.format(date) + ".txt"  ;
}
if (orgid == "L")
{
filename = "D_" + df.format(date) + ".txt"  ;
}

if (orgid == "F"||"IV")
{
filename = "F_" + df.format(date) + ".txt"  ;
}

conf.put(key, filename);

return filename;

请让我知道我错在哪里。

s8vozzvw

s8vozzvw1#

几件事:
不要使用==来比较字符串是否相等。请改用equals()方法。==检查两个对象是否指向相同的内存位置,而String#equals()方法计算对象中的值的比较。
不要以这种方式初始化String变量:String filename = new String("");。这是一个字符串构造函数调用。你应该做的是:String filename = "";
你不能以这种方式检查一个特定的变量是否包含多个可能性之一:

if (orgid == "G" || "ZG" || "S") {

如前所述,您需要使用**String#equals()**方法,并与其他可能性进行比较,您需要将每个字符串与变量进行比较,例如:

if (orgid.equals("G") || orgid.equals("ZG") || orgid.equals("S")) {

最好使用**switch**语句,例如:

/* Using the String#toUpperCase() method ensures that 
   we don't need to worry about what letter case happens
   to be in orgid.    */
switch (orgid.toUpperCase()) {
    case "G":
    case "ZG":
    case "S":
        filename = "N_" + df.format(date) + ".txt";
        break;
    case "L":
        filename = "D_" + df.format(date) + ".txt";
        break;
    case "F":
    case "IV":
        filename = "F_" + df.format(date) + ".txt";
        break;
    default:
        System.err.println("Can Not Establish A Proper File Name (missing prefix)!");
        return;
}

相关问题