001/////////////////////////////////////////////////////////////////////////////////////////////// 002// checkstyle: Checks Java source code and other text files for adherence to a set of rules. 003// Copyright (C) 2001-2024 the original author or authors. 004// 005// This library is free software; you can redistribute it and/or 006// modify it under the terms of the GNU Lesser General Public 007// License as published by the Free Software Foundation; either 008// version 2.1 of the License, or (at your option) any later version. 009// 010// This library is distributed in the hope that it will be useful, 011// but WITHOUT ANY WARRANTY; without even the implied warranty of 012// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 013// Lesser General Public License for more details. 014// 015// You should have received a copy of the GNU Lesser General Public 016// License along with this library; if not, write to the Free Software 017// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 018/////////////////////////////////////////////////////////////////////////////////////////////// 019 020package com.puppycrawl.tools.checkstyle.utils; 021 022import java.util.Arrays; 023 024/** 025 * Contains utility methods for code point. 026 */ 027public final class CodePointUtil { 028 029 /** Stop instances being created. **/ 030 private CodePointUtil() { 031 } 032 033 /** 034 * Checks if given code point array is blank by either being empty, 035 * or contains only whitespace characters. 036 * 037 * @param codePoints The array of unicode code points of string to check. 038 * @return true if codePoints is blank. 039 */ 040 public static boolean isBlank(int... codePoints) { 041 return hasWhitespaceBefore(codePoints.length, codePoints); 042 } 043 044 /** 045 * Checks if the given code point array contains only whitespace up to specified index. 046 * 047 * @param codePoints 048 * array of Unicode code point of string to check 049 * @param index 050 * index to check up to (exclusive) 051 * @return true if all code points preceding given index are whitespace 052 */ 053 public static boolean hasWhitespaceBefore(int index, int... codePoints) { 054 return Arrays.stream(codePoints, 0, index) 055 .allMatch(Character::isWhitespace); 056 } 057 058 /** 059 * Removes trailing whitespaces. 060 * 061 * @param codePoints array of unicode code points 062 * @return unicode code points array with trailing whitespaces removed 063 */ 064 public static int[] stripTrailing(int... codePoints) { 065 int lastIndex = codePoints.length; 066 while (CommonUtil.isCodePointWhitespace(codePoints, lastIndex - 1)) { 067 lastIndex--; 068 } 069 return Arrays.copyOfRange(codePoints, 0, lastIndex); 070 } 071 072 /** 073 * Tests if the unicode code points array 074 * ends with the specified suffix. 075 * 076 * @param suffix the suffix 077 * @param codePoints the array of unicode code points to check 078 * @return {@code true}, if the unicode code points array ends with provided suffix 079 */ 080 public static boolean endsWith(int[] codePoints, String suffix) { 081 final int startIndex = codePoints.length - suffix.length(); 082 return startIndex > -1 && Arrays.equals(Arrays 083 .copyOfRange(codePoints, startIndex, codePoints.length), 084 suffix.codePoints().toArray()); 085 } 086}