Jump to content
  • 0

Stringtokenizer Space?


Ο Χάρος

Question

Hello, i made a code and basically capture tokens from bypass using StringTokenizer tk = new StringTokenizer(command, " ");

and the bypass is like

%objectId%_something $var1 $var2 $var3 

 

the problem is that i use 3 boxes to fill (3 variables) and if a player inside box he use space to write 2 words it capture the 2nd word as another token so it end up like

4 token instead of 3.

 

How can i avoid this? Like if a player writes in box "Something Something" this will be captured as 1 token instead of 2 tokens ?

 

Thanks a lot.

Link to comment
Share on other sites

Recommended Posts

  • 0

 

Use check like this:

if (st.countTokens() != 3)
{
	activeChar.sendMessage("You stupid idoit! I'm a lord from the Dark Side.");
	return;
}

the problem is not counting the tokens.

 

The other boxes are placed for strings too? or you have boxes for int value?

Link to comment
Share on other sites

  • 0


if (st.countTokens() != 4)

{

activeChar.sendMessage("You stupid idoit! I'm a lord from the Dark Side.");

return;

}

else

{

st.nextToken(); // command name

String string1 = st.nextToken();

String string2 = st.nextToken();

String string3 = st.nextToken();

 

if (string1.equals(string2) || string2.equals(string3) || string3.equals(string1))

{

activeChar.sendMessage("Double entries was detected.");

return;

}

 

// Valid code for feature.

}

Link to comment
Share on other sites

  • 0

Take an example...

 

bmqu9zO.jpg

 

code

 

 

if (currentCommand.startsWith("test"))
{
	String mergeString = null;
	int countTokens = st.countTokens();
	int wanted = 4;

	if (countTokens > wanted)
	{
		int fin = countTokens-wanted;
		for (int i=0; i<fin; i++)
		{
			if (i == 0)
				mergeString = st.nextToken() + " " + st.nextToken();
			else
				mergeString += " " + st.nextToken() ;
		}
	}

	
	Broadcast.announceToOnlinePlayers("Merge = " + mergeString);
	while(st.hasMoreTokens())
	{
		Broadcast.announceToOnlinePlayers("next token = " + st.nextToken());
	}
} 

 

 

 

bypasses:

<edit var="name1" width=110 height=15><br>
<edit var="name2" width=110 height=15><br>
<edit var="name3" width=110 height=15><br>
<edit var="name4" width=110 height=15><br>

<a action="bypass -h npc_%objectId%_test $name1 $name2 $name3 $name4">test</a><br><br>

p.s 

Ofc its not the code you looking for but for sure you can edit this one and make your code works

Link to comment
Share on other sites

  • 0

Take an example...

 

bmqu9zO.jpg

 

code

 

 

if (currentCommand.startsWith("test"))
{
	String mergeString = null;
	int countTokens = st.countTokens();
	int wanted = 4;

	if (countTokens > wanted)
	{
		int fin = countTokens-wanted;
		for (int i=0; i<fin; i++)
		{
			if (i == 0)
				mergeString = st.nextToken() + " " + st.nextToken();
			else
				mergeString += " " + st.nextToken() ;
		}
	}

	
	Broadcast.announceToOnlinePlayers("Merge = " + mergeString);
	while(st.hasMoreTokens())
	{
		Broadcast.announceToOnlinePlayers("next token = " + st.nextToken());
	}
} 

 

 

 

bypasses:

<edit var="name1" width=110 height=15><br>
<edit var="name2" width=110 height=15><br>
<edit var="name3" width=110 height=15><br>
<edit var="name4" width=110 height=15><br>

<a action="bypass -h npc_%objectId%_test $name1 $name2 $name3 $name4">test</a><br><br>

p.s 

Ofc its not the code you looking for but for sure you can edit this one and make your code works

But what if he just complete 1 box and let the other 3 null.. this wouldnt work right?

Link to comment
Share on other sites

  • 0

But what if he just complete 1 box and let the other 3 null.. this wouldnt work right?

probly it will fuck it up :P

i did it just for example in the first box cause i cant know what exactly he wants... 

p.s i think it can be done easier but nvm :p

Link to comment
Share on other sites

  • 0

probly it will fuck it up :P

i did it just for example in the first box cause i cant know what exactly he wants... 

p.s i think it can be done easier but nvm :P

 

The code you posted is not really valid since it cannot check empty boxes so doesnt help them at all

Link to comment
Share on other sites

  • 0

The code you posted is not really valid since it cannot check empty boxes so doesnt help them at all

did u read my previous post ? 

 

  1. Ofc its not the code you looking for but for sure you can edit this one and make your code works
  2. i did it just for example in the first box cause i cant know what exactly he wants
Link to comment
Share on other sites

  • 0

 

did u read my previous post ? 

 

  1. Ofc its not the code you looking for but for sure you can edit this one and make your code works
  2. i did it just for example in the first box cause i cant know what exactly he wants

 

I look :D????????????? rofl i quit life

Link to comment
Share on other sites

  • 0

There is a lot easier solution:

<a action="bypass -h npc_%objectId%_test $name1 ¡ $name2 ¡ $name3">

¡ - this is INVERTED EXCLAMATION MARK with C2A1 UTF-8 code. It cannot be wrote by player in game unless he is using programs like adrenaline. There are a lot more characters like this, you can check some UTF-8 table to find some pretty one.

 

Code:

StringTokenizer tk = new StringTokenizer(command, "¡");

You should use .trim() for every token parsed from StringTokenizer so they will not contain spaces.

Link to comment
Share on other sites

  • 0

There is a lot easier solution:

<a action="bypass -h npc_%objectId%_test $name1 ¡ $name2 ¡ $name3">

¡ - this is INVERTED EXCLAMATION MARK with C2A1 UTF-8 code. It cannot be wrote by player in game unless he is using programs like adrenaline. There are a lot more characters like this, you can check some UTF-8 table to find some pretty one.

 

Code:

StringTokenizer tk = new StringTokenizer(command, "¡");

You should use .trim() for every token parsed from StringTokenizer so they will not contain spaces.

Can you give an example or tell us how this one will help this problem?

 

This guy didnt want to cancel the proccess when one more token found , contrary he want the unexpected tokens as one string with spaces inside.

i believe trim is useless, correct me if im wrong

Edited by melron
Link to comment
Share on other sites

  • 0

There is a lot easier solution:

<a action="bypass -h npc_%objectId%_test $name1 ¡ $name2 ¡ $name3">

¡ - this is INVERTED EXCLAMATION MARK with C2A1 UTF-8 code. It cannot be wrote by player in game unless he is using programs like adrenaline. There are a lot more characters like this, you can check some UTF-8 table to find some pretty one.

 

Code:

StringTokenizer tk = new StringTokenizer(command, "¡");

You should use .trim() for every token parsed from StringTokenizer so they will not contain spaces.

Did you try it? It's not working + eclipse can't compile this character.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...