Velocity Reviews

Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   Java (http://www.velocityreviews.com/forums/f30-java.html)
-   -   How to dedect 4 consecutive space (http://www.velocityreviews.com/forums/t148934-how-to-dedect-4-consecutive-space.html)

elingtse@gmail.com 12-31-2005 10:48 AM

How to dedect 4 consecutive space
 
HI all,

I need to replace a tab for every 4 consecutive spaces for a statement
which is included in an array. I've set another index array to mark
whether the content is space, if the index become 4, if change to tab.
But it seems hard to go back the previous index to delete the previous
spaces in a for loop. Could anyone give me some hints ? Thanks a lot.

Statement Example :

s = space
t = tab
X = content

sssssssssXXXXXssssssXXXXXX

Expected Solution :

ttsXXXXXtssXXXXXX
(replace every consecutive 4 space into tab)

et


Bart Cremers 12-31-2005 10:53 AM

Re: How to dedect 4 consecutive space
 
String s = " XXXXX XXXXXX";
String ts = s.replaceAll(" {4}", "\t");

Regards,

Bart


elingtse@gmail.com 12-31-2005 11:13 AM

Re: How to dedect 4 consecutive space
 
Thanks Bart, but it did not work because I am using a char array to
hold the statement, String method cannot be used here. Any other
suggestion ?


Larry Barowski 12-31-2005 01:07 PM

Re: How to dedect 4 consecutive space
 

<elingtse@gmail.com> wrote in message
news:1136026099.945497.270800@g14g2000cwa.googlegr oups.com...
> HI all,
>
> I need to replace a tab for every 4 consecutive spaces for a statement
> which is included in an array. I've set another index array to mark
> whether the content is space, if the index become 4, if change to tab.
> But it seems hard to go back the previous index to delete the previous
> spaces in a for loop. Could anyone give me some hints ? Thanks a lot.
>
> Statement Example :
>
> s = space
> t = tab
> X = content
>
> sssssssssXXXXXssssssXXXXXX
>
> Expected Solution :
>
> ttsXXXXXtssXXXXXX
> (replace every consecutive 4 space into tab)


But you probably need to do more than that for a real "tabify".
Consider:

stXXX, sstXXX, or ssstXXX all become tXXX
and probably sXXX becomes tXXX
XsssX becomes XtX, XXssX becomes XXtX
and probably XXXsX becomes XXXtX

For a tabify operation, your above example is incorrect.
To get the same layout,
sssssssssXXXXXssssssXXXXXX becomes
ttsXXXXXttXXXXXX

Maintain a screen position separately from the character
position, and update it differently when a tab is
encountered:
screen_pos += TAB_SIZE - (screen_pos % TAB_SIZE).
Keep a running count of consecutive spaces. If a series of
spaces ends at (screen_pos % TAB_SIZE) == TAB_SIZE -1,
replace them with a tab. Else if a series of spaces ends at a tab,
delete them. For a character array, you can do this in place
by keeping a "follower" index and copying characters to
there.



Bart Cremers 12-31-2005 11:05 PM

Re: How to dedect 4 consecutive space
 
String s = new String(charArray);
charArray = s.replaceAll(" {4}", "\t").toCharArray();

This should work for the simple case of replacing 4 consecutive spaces
with a single tab.

As Larry pointed out, it would be more complex if you need to consider
correct tab stops and stuff.

Bart


elingtse@gmail.com 01-01-2006 04:28 AM

Re: How to dedect 4 consecutive space
 

Bart Cremers wrote:
> String s = new String(charArray);
> charArray = s.replaceAll(" {4}", "\t").toCharArray();
>
> This should work for the simple case of replacing 4 consecutive spaces
> with a single tab.
>
> As Larry pointed out, it would be more complex if you need to consider
> correct tab stops and stuff.
>
> Bart


It works perfectly.

Thanks Bart & Larry, you do me a great favor.



All times are GMT. The time now is 12:38 AM.

Powered by vBulletin®. Copyright ©2000 - 2014, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.