> On Sep 18, 2018, at 11:52 AM, Jim Laskey <james.laskey at oracle.com> wrote:
> 
> Please review the code for String::detab and String::entab. Used to expand 
> tabs into spaces, and spaces back to tabs.
> 
> webrev: http://cr.openjdk.java.net/~jlaskey/8210717/webrev/index.html
> jbs: https://bugs.openjdk.java.net/browse/JDK-8210717
> csr: https://bugs.openjdk.java.net/browse/JDK-8210718 
> <https://bugs.openjdk.java.net/browse/JDK-8210718>

For detab: here's an attempt at a brief formal description of the behavior, if 
it's useful.

"Replace each tab code point (U+0009) in the string with one or more space code 
points (U+0020). The number of spaces that replace a tab varies between 1 and 
{@code tabWidth}, whatever is necessary so that the last replacement space is 
the <em>nth</em> code point of the {@link #lines() line}, where {@code n % 
tabWidth == 0}."

---

For entab: I noticed that something like the following doesn't behave how you'd 
probably expect.

"    int x = 23;".entab(4)
--> "\tint\tx =\t23;"

For other strings, the intent is ambiguous (are the first and last name two 
fields, or only one?):

"Dan Smith   daniel.smith".entab(4)
--> "Dan\tSmith\tdaniel.smith"

Seems like there are multiple possible approaches:
- Entab all spaces that align with a tab stop (current behavior)
- Only entab sequences of 2 or more spaces (implies 'tabWidth >= 2')
- Only entab prefix spaces

We can support all of these via different overloads or parameters, or we can 
choose the best one for most use cases. But I don't know that we really have 
pressing use cases—detab is the one that's easy to envision using. It might be 
best to just drop the method unless/until compelling use cases arise.

Reply via email to