O IntStream
olan kod noktalarının akışını kullanmak genellikle daha güvenlidir:
IntStream codePoints = string.codePoints();
Bu şekilde herhangi bir Unicode sembolleriyle doğru sonuçlar olacak böylece Unicode karakter çiftlerini, tek kod noktasıyla birleştirilecek olacak . Örnek kullanım:
String result = string.codePoints().map(Character::toUpperCase)
.collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append)
.toString();
Ayrıca böylece Stream<Character>
işleme bile daha etkili olabilir Boksu önlemek unutmayın. Böyle bir yaklaşım daha az işlevsel görünüyor
StringBuilder sb = new StringBuilder();
String result = string.codePoints().map(Character::toUpperCase)
.forEachOrdered(sb::appendCodePoint);
iken Zaten bir StringBuilder
varsa veya daha sonra bir şey daha bitiştirmek istiyorsanız, daha verimli olabilir:
böyle akışı toplamak için başka bir yol StringBuilder
ayrı kullanmaktır aynı dize.
Bu özüm, Java koduna uymayan Unicode karakteri içeriyorsa, bu çözüm çalışmaz. Bu, örneğin, bazı arcane dillerin yanı sıra ifadeler ile durumdur. Bunu işleyen bir çözüm için [Tagir'in cevabı] 'na (https://stackoverflow.com/a/32472793/452775) bakın. – Lii