Java 算法:单引号非匹配模式

Java 算法:单引号非匹配模式,java,Java,我有一个问题,我将有一个模板,如: "Tada lala at ha on EEEE (MMM d)." 需要传递给DateTimeFormatter.format()的 所以我们需要引用字面文本,如 " 'Tada lala at' ha 'on' EEEE (MMM d)." 因此,日期模式可能会随着时间而变化: "ha 'on' EEEE 'tada lala at' ha 'on' MMM, d" 我正在展示使用以下各项的真实代码: Date myDate; // which I

我有一个问题,我将有一个模板,如:

"Tada lala at ha on EEEE (MMM d)."
需要传递给DateTimeFormatter.format()的

所以我们需要引用字面文本,如

" 'Tada lala at' ha 'on' EEEE (MMM d)."
因此,日期模式可能会随着时间而变化:

"ha 'on' EEEE 'tada lala at' ha 'on' MMM, d"
我正在展示使用以下各项的真实代码:

Date myDate; // which I just computed.
String template = getTemplateFromDB();//" 'Tada lala at' ha 'on' EEEE (MMM d)."
String formattedStr = DateTimeFormatter(date, template);
所以,通过进化,我的意思是模板字符串将被进化,但它将驻留在数据库中,这样代码就不会被耦合

因此,我需要找到一种算法,只将文字文本放在单引号中,而不使用日期模式,例如(EEEE)。实现这一点的最佳算法是什么

我有一个算法草案:

String myRegEx = "(EEEE|MMM|d|...)";
ArrayList<Integer> positionsFound; // a list that is populated with the index positions of the myRegEx patterns are located.

String[] splittedText = myStr.split(); // " 'Tada lala at' ha 'on' EEEE (MMM d)."

StringBuffer sbuf = new StringBuffer();

for (int i = 0;i < splittedText.length;i++) {
    if (!positionsFound.contains(i)) {
        splittedText[i] = "'"+splittedText[i]+"'";
    }
    sbuf.append(splittedText[i]+" ");
}

return sbuf.toString();
String myRegEx=“(EEEE | MMM | d |…)”;
ArrayList位置查找;//将找到一个填充了myRegEx模式索引位置的列表。
String[]splittedText=myStr.split();//“‘Tada lala’在‘ha’on‘EEEE(MMM d)’”
StringBuffer sbuf=新的StringBuffer();
for(int i=0;i
一般来说,这不是一个可解决的问题(至少没有进一步的限制)。算法应该如何知道字符串的哪一部分不受影响?这有点令人困惑。如果格式随着时间的推移而演变,那么这是处理其变化的好时机;否则,您只是在构建大量可能永远都不需要的意大利面代码。除非是这样,否则您实际上可以演示备用模式的实际用途。我添加了实际代码来演示用例。@Oliver,我已经解释过了。因为我们已经知道DateTimeFormatter的模式,比如EEE、MMM等,所以除了这些文本以外的任何内容都是不需要引用的。为什么这些部分需要引用?