未验证 提交 f92d57fb 编写于 作者: A Andrei Pechkurov 提交者: GitHub

chore(core): add StringSink#lastIndexOf() methods (#3714)

上级 ce0702a4
...@@ -611,15 +611,19 @@ public final class Chars { ...@@ -611,15 +611,19 @@ public final class Chars {
return isQuote(open) && open == s.charAt(s.length() - 1); return isQuote(open) && open == s.charAt(s.length() - 1);
} }
public static int lastIndexOf(CharSequence s, char c) { public static int lastIndexOf(CharSequence sequence, char term) {
for (int i = s.length() - 1; i > -1; i--) { for (int i = sequence.length() - 1; i > -1; i--) {
if (s.charAt(i) == c) { if (sequence.charAt(i) == term) {
return i; return i;
} }
} }
return -1; return -1;
} }
public static int lastIndexOf(CharSequence sequence, int sequenceLo, int sequenceHi, CharSequence term) {
return indexOf(sequence, sequenceLo, sequenceHi, term, -1);
}
public static int lowerCaseAsciiHashCode(CharSequence value, int lo, int hi) { public static int lowerCaseAsciiHashCode(CharSequence value, int lo, int hi) {
if (hi == lo) { if (hi == lo) {
return 0; return 0;
......
...@@ -82,12 +82,20 @@ public class StringSink extends AbstractCharSink implements MutableCharSink, Clo ...@@ -82,12 +82,20 @@ public class StringSink extends AbstractCharSink implements MutableCharSink, Clo
return Chars.hashCode(buffer, 0, pos); return Chars.hashCode(buffer, 0, pos);
} }
public int indexOf(String s) { public int indexOf(@NotNull String s) {
return Chars.indexOf(this, 0, pos, s); return Chars.indexOf(this, 0, pos, s);
} }
public int indexOf(String s, int fromIndex) { public int indexOf(@NotNull String s, int fromIndex) {
return Chars.indexOf(this, fromIndex, pos, s); return Chars.indexOf(this, Math.min(fromIndex, pos), pos, s);
}
public int lastIndexOf(@NotNull String s) {
return Chars.lastIndexOf(this, 0, pos, s);
}
public int lastIndexOf(@NotNull String s, int fromIndex) {
return Chars.lastIndexOf(this, 0, Math.min(fromIndex + s.length(), pos), s);
} }
@Override @Override
......
...@@ -26,9 +26,45 @@ package io.questdb.test.std; ...@@ -26,9 +26,45 @@ package io.questdb.test.std;
import io.questdb.std.str.StringSink; import io.questdb.std.str.StringSink;
import io.questdb.test.tools.TestUtils; import io.questdb.test.tools.TestUtils;
import org.junit.Assert;
import org.junit.Test; import org.junit.Test;
public class StringSinkTest { public class StringSinkTest {
@Test
public void testIndexOf() {
StringSink ss = new StringSink();
StringBuilder sb = new StringBuilder();
Assert.assertEquals(sb.indexOf("abc"), ss.indexOf("abc"));
String str = "foo bar baz foo";
ss.put(str);
sb.append(str);
Assert.assertEquals(sb.indexOf("foo"), ss.indexOf("foo"));
Assert.assertEquals(sb.indexOf("bar"), ss.indexOf("bar"));
Assert.assertEquals(sb.indexOf("baz"), ss.indexOf("baz"));
Assert.assertEquals(sb.indexOf("abc"), ss.indexOf("abc"));
Assert.assertEquals(sb.lastIndexOf("foo"), ss.lastIndexOf("foo"));
Assert.assertEquals(sb.lastIndexOf("bar"), ss.lastIndexOf("bar"));
Assert.assertEquals(sb.lastIndexOf("baz"), ss.lastIndexOf("baz"));
Assert.assertEquals(sb.lastIndexOf("abc"), ss.lastIndexOf("abc"));
for (int i = 0; i < sb.length(); i++) {
Assert.assertEquals("index: " + i, sb.indexOf("foo", i), ss.indexOf("foo", i));
Assert.assertEquals("index: " + i, sb.indexOf("bar", i), ss.indexOf("bar", i));
Assert.assertEquals("index: " + i, sb.indexOf("baz", i), ss.indexOf("baz", i));
Assert.assertEquals("index: " + i, sb.indexOf("abc", i), ss.indexOf("abc", i));
Assert.assertEquals("index: " + i, sb.lastIndexOf("foo", i), ss.lastIndexOf("foo", i));
Assert.assertEquals("index: " + i, sb.lastIndexOf("bar", i), ss.lastIndexOf("bar", i));
Assert.assertEquals("index: " + i, sb.lastIndexOf("baz", i), ss.lastIndexOf("baz", i));
Assert.assertEquals("index: " + i, sb.lastIndexOf("abc", i), ss.lastIndexOf("abc", i));
}
}
@Test @Test
public void testUnprintable() { public void testUnprintable() {
StringSink ss = new StringSink(); StringSink ss = new StringSink();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册