You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

StringUtils.java 3.2KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. /*
  2. * Copyright (c) 2006-2014 DMDirc Developers
  3. *
  4. * Permission is hereby granted, free of charge, to any person obtaining a copy
  5. * of this software and associated documentation files (the "Software"), to deal
  6. * in the Software without restriction, including without limitation the rights
  7. * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  8. * copies of the Software, and to permit persons to whom the Software is
  9. * furnished to do so, subject to the following conditions:
  10. *
  11. * The above copyright notice and this permission notice shall be included in
  12. * all copies or substantial portions of the Software.
  13. *
  14. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  15. * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  16. * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  17. * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  18. * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  19. * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  20. * SOFTWARE.
  21. */
  22. package com.dmdirc.util;
  23. /**
  24. * Utilities for dealing with strings.
  25. */
  26. public final class StringUtils {
  27. private StringUtils() {
  28. // Shouldn't be instansiated.
  29. }
  30. /**
  31. * Returns the indexes for the word surrounding the index in the specified string.
  32. *
  33. * @param text Text to get word from
  34. * @param index Index to get surrounding word
  35. *
  36. * @return An array containing two elements: the index of the first character of the word, and
  37. * the index of the first character beyond the end of the word. If the specified index is not
  38. * contained within a word (i.e., is whitespace) then 0,0 is returned.
  39. */
  40. public static int[] indiciesOfWord(final CharSequence text, final int index) {
  41. final int start = indexOfStartOfWord(text, index);
  42. final int end = indexOfEndOfWord(text, index);
  43. if (start > end) {
  44. return new int[]{0, 0};
  45. }
  46. return new int[]{start, end};
  47. }
  48. /**
  49. * Returns the start index for the word surrounding the index in the specified string.
  50. *
  51. * @param text Text to get word from
  52. * @param index Index to get surrounding word
  53. *
  54. * @return Start index of the word surrounding the index
  55. */
  56. public static int indexOfStartOfWord(final CharSequence text, final int index) {
  57. int start = index;
  58. // Traverse backwards
  59. while (start > 0 && start < text.length() && text.charAt(start) != ' ') {
  60. start--;
  61. }
  62. if (start + 1 < text.length() && text.charAt(start) == ' ') {
  63. start++;
  64. }
  65. return start;
  66. }
  67. /**
  68. * Returns the end index for the word surrounding the index in the specified string.
  69. *
  70. * @param text Text to get word from
  71. * @param index Index to get surrounding word
  72. *
  73. * @return End index of the word surrounding the index
  74. */
  75. public static int indexOfEndOfWord(final CharSequence text, final int index) {
  76. int end = index;
  77. // And forwards
  78. while (end < text.length() && end >= 0 && text.charAt(end) != ' ') {
  79. end++;
  80. }
  81. return end;
  82. }
  83. }