diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/text/CodePointIter.java b/hutool-core/src/main/java/org/dromara/hutool/core/text/CodePointIter.java new file mode 100644 index 000000000..e1c9765d3 --- /dev/null +++ b/hutool-core/src/main/java/org/dromara/hutool/core/text/CodePointIter.java @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2024. looly(loolly@aliyun.com) + * Hutool is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * https://license.coscl.org.cn/MulanPSL2 + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, + * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, + * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ + +package org.dromara.hutool.core.text; + +import java.util.Iterator; + +/** + * Unicode字符遍历器
+ * 参考:http://stackoverflow.com/a/21791059/6030888 + * + * @author Looly + */ +public class CodePointIter implements Iterable { + + final String str; + + /** + * 构造 + * + * @param str 字符串 + */ + public CodePointIter(final String str) { + this.str = str; + } + + @Override + public Iterator iterator() { + return new Iterator() { + + private final int length = str.length(); + private int nextIndex = 0; + + @Override + public boolean hasNext() { + return this.nextIndex < this.length; + } + + @Override + public Integer next() { + final int result = str.codePointAt(this.nextIndex); + this.nextIndex += Character.charCount(result); + return result; + } + + @Override + public void remove() { + throw new UnsupportedOperationException(); + } + }; + } +}