Span implements Comparable<Span> { public boolean intersects(Span s) { int sstart = s.getStart(); return this.contains(s) || s.contains(this) || getStart() <= sstart && sstart < getEnd() || sstart <= getStart() && getStart() < s.getEnd(); } Span(int s, int e, String type);  Span(int s, int e);  Span(Span span, int offset); int getStart(); int getEnd(); String getType(); int length(); boolean contains(Span s); boolean contains(int index); boolean startsWith(Span s); boolean intersects(Span s); boolean crosses(Span s); CharSequence getCoveredText(CharSequence text); int compareTo(Span s); @Override int hashCode(); @Override boolean equals(Object o); @Override String toString(); static String[] spansToStrings(Span[] spans, CharSequence s); static String[] spansToStrings(Span[] spans, String[] tokens);  }
@Test public void testIntersects() { Span a = new Span(10, 50); Span b = new Span(40, 100); assertTrue(a.intersects(b)); assertTrue(b.intersects(a)); Span c = new Span(10, 20); Span d = new Span(40, 50); assertFalse(c.intersects(d)); assertFalse(d.intersects(c)); assertTrue(b.intersects(d)); }