...

View Full Version : Java: I Can't pass a string variable into array?



thehaunt
01-12-2005, 11:51 PM
I'm new to Java, very very new, and I have encountered a hair raising problem: I can't seem to pass the value of a string variable into a string array. It's very frustrating when I poll the array and get null as far as the eye can see. The code follows:
_________________________
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.lang.String.*;

public class SntncArray extends Applet implements ActionListener
{
TextField theSntnc = new TextField(60);
Button pressMe=new Button("parse to array");
String fillIt;
String checkIt;
Label fillMe;
String[] sntncArray= new String[30];


public void init()
{
add(theSntnc);
add(pressMe);
pressMe.addActionListener(this);
}

public void actionPerformed(ActionEvent pressMe)
{
fillIt=new String (theSntnc.getText());
fillMe=new Label("FillIt"+fillIt);
add (fillMe);
invalidate();
validate();
brkSntnc(fillIt);
}

public void brkSntnc(String sntnc)
{
int x=0;
int wrdCnt=0;
int myLen;
while (x!=-1)
{
myLen=sntnc.length();
x=sntnc.indexOf(" ");
sntncArray[wrdCnt]=sntnc.substring(0,x-1);
wrdCnt++;
System.out.println("Before:"+sntnc);
sntnc=sntnc.substring(x+1,myLen);
System.out.println("After:"+sntnc);
System.out.println("Array at "+wrdCnt+" is:"+sntncArray[wrdCnt]);
}
}

}
____________________________

Basically I'm trying to write a class which accepts input (in the form of an applet) and breaks the words in the input into an array, one array slot for each word. So far, as I said before, sntncArray[wrdCnt]=sntnc.substring(0,x-1); always equals null, in spite of the fact that sntnc.substring(0,x-1); is a valid string. I'm clearly missing something very obvious, but I can't figure out what. I know that strings are objects and not primitives and so I can't use them as primitives (I think) but how can I pass the value of a given string into an array? I even tried making a string to hold the value of sntnc.substring(0,x-1); ("passer") and tried sntncAray[wrdCnt]=passer; but with the same result:Null. Any assistance is greatly appreciated. Greatly greatly. VERY Greatly greatly.
[Thnx]
//end

Antoniohawk
01-13-2005, 12:29 AM
Could you please enclose your code with [ code ] tags so that it retain the formatting (I hope that it is formatted) and become easier to read. I want to help, but it's really hard when it takes so much effort just to deciper the thing. :)

cfc
01-13-2005, 03:05 AM
fillIt=new String (theSntnc.getText());

Correct me if I'm wrong, but isn't the "new String( ... )" unnecessary?

sntncArray[wrdCnt]=sntnc.substring(0,x-1);

I believe substring excludes the last index you specify. Therefore, the -1 will probably return one less character than you want per word.

I'm a little out of practice with Java so I can't dissect your code (however small it is) ATM, and my suggestions probably won't fix your problem. I'll continue looking at it though ;) . However, if this is purely for personal experimentation (and not something you plan to put on the internet where nobody is guaranteed to have JRE 1.4), the String object has had a split(String regex) method since 1.4.

thehaunt
01-13-2005, 04:10 PM
yeah the fillIt is unnecessary, I just put it there to make sure the input was accurate, rather than using System.out.println etc...


And above, how will putting [] around the code help it maintain it's formatting?

thehaunt
01-13-2005, 04:23 PM
AHA!! Boy those FAQ's are handy!
Here you go, code in a more readable format!
Thanks for the tip.



import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.lang.*;


public class SntncArray extends Applet implements ActionListener
{
TextField theSntnc = new TextField(60);
Button pressMe=new Button("parse to array");
String fillIt;
String checkIt;
Label fillMe;

public void init()
{
add(theSntnc);
add(pressMe);
pressMe.addActionListener(this);
}

public void actionPerformed(ActionEvent pressMe)
{
fillIt=new String (theSntnc.getText());
fillMe=new Label("FillIt"+fillIt);
add (fillMe);
invalidate();
validate();
brkSntnc(fillIt);
}


public void brkSntnc(String sntnc)
{
int x=0;
int wrdCnt=0;
int myLen;
while (x!=-1)
{
myLen=sntnc.length();
x=sntnc.indexOf(" ");
sntncArray[wrdCnt]=sntnc.substring(0,x)
wrdCnt++;
sntnc=sntnc.substring(x,myLen);
}
}
}

cfc
01-14-2005, 01:21 AM
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.lang.*;


/* <applet code="SntncArray.class" width="300" height="300"></applet> */

public class SntncArray extends Applet implements ActionListener
{
TextField theSntnc = new TextField(60);
Button pressMe=new Button("parse to array");
String fillIt;
String checkIt;
Label fillMe;
String[] sntncArray = new String[30];

public void init()
{
add(theSntnc);
add(pressMe);
pressMe.addActionListener(this);
}

public void actionPerformed(ActionEvent pressMe)
{
fillIt = theSntnc.getText();
fillMe = new Label("FillIt" + fillIt);
add (fillMe);
invalidate();
validate();
brkSntnc(fillIt);
}


public void brkSntnc(String sntnc)
{
int x=0;
int wrdCnt=0;
int myLen;
while (x!=-1)
{
myLen=sntnc.length();
x=sntnc.indexOf(" ");
sntncArray[wrdCnt] = sntnc.substring(0, x);
wrdCnt++;
sntnc=sntnc.substring(x, myLen);
}
}
}


You're sure this doesn't work for you? I compiled and opened it in appletviewer and it worked for me. (BTW what I meant is that you don't have to create a new String class when putting theSntnc.getText() into a new variable).

thehaunt
01-14-2005, 04:18 AM
Oh man I feel so stupid, after days of looking at this code asking myself endlessly why it didn't work, I looked at what I posted and realized that the reason
System.out.println(sntncArray[wrdCnt]); was returning null all the time was that I had placed the system out call AFTER incrementing wrdCnt instead of before. How embarrassing :P



EZ Archive Ads Plugin for vBulletin Copyright 2006 Computer Help Forum