Changeset 8435 in josm for trunk/src/org/openstreetmap/josm/tools
- Timestamp:
- 2015-05-31T17:06:27+02:00 (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/tools/Utils.java
r8429 r8435 40 40 import java.util.Collection; 41 41 import java.util.Collections; 42 import java.util.HashSet; 42 43 import java.util.Iterator; 43 44 import java.util.List; 44 45 import java.util.Locale; 46 import java.util.Set; 45 47 import java.util.concurrent.ExecutorService; 46 48 import java.util.concurrent.Executors; … … 899 901 * @since 5772 900 902 */ 901 public static String strip(String str) { 903 public static String strip(final String str) { 904 return strip(str, null); 905 } 906 907 /** 908 * An alternative to {@link String#trim()} to effectively remove all leading and trailing white characters, including Unicode ones. 909 * @param str The string to strip 910 * @param skipChars additional characters to skip 911 * @return <code>str</code>, without leading and trailing characters, according to 912 * {@link Character#isWhitespace(char)}, {@link Character#isSpaceChar(char)} and skipChars. 913 * @since 8435 914 */ 915 public static String strip(final String str, final String skipChars) { 902 916 if (str == null || str.isEmpty()) { 903 917 return str; 904 918 } 905 int start = 0, end = str.length(); 906 boolean leadingWhite = true; 907 while (leadingWhite && start < end) { 919 // create set with chars to skip 920 Set<Character> skipSet = new HashSet<>(); 921 // '\u200B' (ZERO WIDTH SPACE character) needs to be handled manually because of change in Unicode 6.0 (Java 7, see #8918) 922 skipSet.add('\u200B'); 923 // same for '\uFEFF' (ZERO WIDTH NO-BREAK SPACE) 924 skipSet.add('\uFEFF'); 925 if (skipChars != null) { 926 for (char c : skipChars.toCharArray()) { 927 skipSet.add(c); 928 } 929 } 930 int start = 0; 931 int end = str.length(); 932 boolean leadingSkipChar = true; 933 while (leadingSkipChar && start < end) { 908 934 char c = str.charAt(start); 909 // '\u200B' (ZERO WIDTH SPACE character) needs to be handled manually because of change in Unicode 6.0 (Java 7, see #8918) 910 // same for '\uFEFF' (ZERO WIDTH NO-BREAK SPACE) 911 leadingWhite = (Character.isWhitespace(c) || Character.isSpaceChar(c) || c == '\u200B' || c == '\uFEFF'); 912 if (leadingWhite) { 935 leadingSkipChar = Character.isWhitespace(c) || Character.isSpaceChar(c) || skipSet.contains(c); 936 if (leadingSkipChar) { 913 937 start++; 914 938 } 915 939 } 916 boolean trailing White= true;917 while (trailing White&& end > start+1) {940 boolean trailingSkipChar = true; 941 while (trailingSkipChar && end > start+1) { 918 942 char c = str.charAt(end-1); 919 trailing White = (Character.isWhitespace(c) || Character.isSpaceChar(c) ||c == '\u200B' || c == '\uFEFF');920 if (trailing White) {943 trailingSkipChar = Character.isWhitespace(c) || Character.isSpaceChar(c) || skipSet.contains(c); 944 if (trailingSkipChar) { 921 945 end--; 922 946 }
Note:
See TracChangeset
for help on using the changeset viewer.