Java Pattern.quote通过oozie传递给spark程序时\037字符无效

Java Pattern.quote通过oozie传递给spark程序时\037字符无效,java,oozie,Java,Oozie,我正在通过oozie将ASCII字符\037(用作字段分隔符)传递给spark程序。在oozie属性文件中,我给出了如下值: delimiterArg=\\\037 在我的spark程序中,我正试图按如下方式拆分这条线 public static void main(String[] args) { String column1 = line.split(Pattern.quote(args[0])); } 但它不起作用。但是如果我不使用模式。

我正在通过oozie将ASCII字符\037(用作字段分隔符)传递给spark程序。在oozie属性文件中,我给出了如下值:

delimiterArg=\\\037
在我的spark程序中,我正试图按如下方式拆分这条线

public static void main(String[] args) {
    String column1 = line.split(Pattern.quote(args[0]));                    
}
但它不起作用。但是如果我不使用
模式。quote
,它是有效的

public static void main(String[] args) {
   String column1 = line.split(args[0]));                               
 }
我想使用Pattern.quote(),因为它将处理特殊字符,如管道(|)。有什么建议吗

编辑:

下面是我的完整场景

我需要将分隔符\037传递给spark程序,该程序通过oozie作业触发。我将使用它作为字段分隔符来处理数据

为了将\037传递给spark程序,我必须在job.properties文件中给出\\037

现在,我在spark程序中收到了这个值,并尝试拆分输入字符串。问题是

String column1 =  line.split(Pattern.quote(args[0])); // Not Working


String column1 =  line.split(args[0])); // Working 

我怀疑您传递给
Pattern.quote()
的字符串不是您想要的字符串

下面是一个测试程序:

public class MVCE
    {
    public static void main(String[] argv)
        {
        final String line = "ab\037cd\037ef";
        final String[] columns = line.split( Pattern.quote("\037") );
        System.out.println(Arrays.toString(columns));
        }
    }
该程序的输出为:

[ab, cd, ef]

我将通过在
main()
方法的开头添加一个print语句来调试您的情况,这样您就可以准确地看到作为
args[0]
传递的字符串。我对oozie一无所知,但我注意到您在其文件中显示了
\\037
。也许您有多个级别的程序以各种方式解释字节,这样配置文件中的五个字节(如果是ASCII或UTF-8)就不会在
args[0]
中产生预期/预期的四个Unicode字符,谢谢。事实上,我确实打印了这些值。我还认为这是一个多层次程序解释字节的问题。我所做的是在args[0]上进行打印,结果是\037。这和预期的一样,但是它的hashCode()给了我2788536的值,这是我得到的五字节“\\037”的hashCode。但是当直接使用时(没有Pattern.quote),它确实分割了行\037不会被打印,因为它是不可打印的,但是args[0]被打印为\037,并且当它与line.split(args[0])一样直接使用时,它确实正确地分割了行@dshWhy双反斜杠?@EJP我需要通过oozie将该参数传递给我的spark程序。因此,在job.properties文件中,我给出了类似于delifterarg=\\037的值。所以这个值将作为“\037”传递给Spark程序。为什么?你试过只用一个反斜杠吗?或者你只是在猜测?@EJP是的,我已经尝试了所有可能的组合。当我不使用反斜杠时,它只会通过037。我已经从Spark应用程序日志中验证了这一点。因此,我打印出了我从Spark应用程序中获得的值的哈希代码,它给了我2788536的值(对于DelimiterArg=\\037)。然后我想\037将不会打印在日志文件中,因为它是不可打印的,但当我尝试拆分该行时,它工作了!