How to dedect 4 consecutive space

E

elingtse

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
 
B

Bart Cremers

String s = " XXXXX XXXXXX";
String ts = s.replaceAll(" {4}", "\t");

Regards,

Bart
 
E

elingtse

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 ?
 
L

Larry Barowski

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.
 
B

Bart Cremers

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
 
E

elingtse

Bart said:
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.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,744
Messages
2,569,483
Members
44,902
Latest member
Elena68X5

Latest Threads

Top