Java-8 - 取代"?"从Optional.of(String)开始的字符

时间:2018-01-09 20:49:14

标签: java string java-8 optional

我试图取代"?"如果我的字符串以?开头,则删除它。我测试了这段代码并且它不起作用:

Optional<String> stringvalue = Optional.of("?test1=search&test2=ok&test3=hello");

String parameterName = "test1";

if( stringvalue.get().startsWith("?") ){
    stringvalue.get().replaceFirst("\\?", "");
}
System.out.println(stringvalue.get());

3 个答案:

答案 0 :(得分:3)

答案在@Aominè 的评论中,但如何?我认为你必须使用:

if (stringvalue.get().startsWith("?")) {
    stringvalue = Optional.of(stringvalue.get().replaceFirst("\\?", ""));
    //            ^^^^^^^^^^^-------note this
}

或者只是:

stringvalue = Optional.of(stringvalue.get().replaceFirst("^\\?", ""));
//------------^^^^^^^^^^^---------------------------------^

答案 1 :(得分:3)

您也可以使用Optional.map

stringvalue = stringvalue.map( (s) -> s.startsWith("?") ? s.replaceFirst("\\?", "") : s );

答案 2 :(得分:2)

Java中的字符串是immutable。所以def run(dirs, img, file_): for (x, y) in labels: component = uf.find(labels[(x, y)]) labels[(x, y)] = component if labels[(x, y)]==0: Zero[y][x]=int(255) count=count+1 if count<=43: continue elif count>43: Zeroth = Image.fromarray(Zero) Zeroth.save(os.path.join(dirs, file_+'Zero.png'), 'png') return (labels, output_img) def main(): path='E:/Dataset/1/' for root, dirs, files in sorted(os.walk(path)): for file_ in files: #print (dirs) # print (files) full_file_path = os.path.join(root, file_) img = Image.open(full_file_path) (labels, output_img) = run(root, img, file_[:-4]) 保持原始String值不变。您需要存储替换结果,如下所示:

stringvalue.get().replaceFirst("\\?", "");

另请注意,您可以使用String parameterName = stringvalue.get().replaceFirst("\\?", ""); 避免测试字符串是否以^开始:

?