We help IT Professionals succeed at work.

reading elements from string array

jaggernat
jaggernat asked
on
Medium Priority
319 Views
Last Modified: 2010-05-18
Dear experts

I have this little peice of code on which i want clarification



bean  contains a field  
private String[] allLRNs = new String[0]; and valueobject also contains the same field
private String[] allLRNs = new String[0];

I am setting values in the string array(in bean)  and setting it to value object.

Later on i want to get the array values from the valueobject and set it to bean by doing this

bean.setAllLRNs(incidentNotificationVALUEOBJ.getAllLRNs());
System.out.println("IDEN VALUE" +incidentNotificationVO.getAllLRNs());

BUT incidentNotificationVO.getAllLRNs()  prints/gives me the Array object. HOW do i get to see the
individual string elements in it?

thanks
J
Comment
Watch Question

Commented:
you have to iterate over the string array.

for(int i=0;i <incidentNotificationVO.getAllLRNs().length;i++  ){
System.out.println(incidentNotificationVO.getAllLRNs()[i]);
}

fargo

Author

Commented:
thanks for the response

I am not sure why its not going through the loop

i gave like this

for(int i=0;i <incidentNotificationVO.getAllLRNs().length;i++  )
        {
           System.out.println("IDEN VALUE"+incidentNotificationVO.getAllLRNs()[i]);
         }

        System.out.println("IDEN ArrayObjectVALUE" +incidentNotificationVO.getAllLRNs());

its printing "IDEN ArrayObjectVALUE"  but not   "IDEN VALUE"
Commented:
Hi,

It means the incidentNotificationVO.getAllLRNs().length is 0.
you have no elements in the array.

print out
System.out.println(incidentNotificationVO.getAllLRNs().length);

fargo

Not the solution you were looking for? Getting a personalized solution is easy.

Ask the Experts

Author

Commented:
oh yea,,u are damn right..arraylength is 0.

but this is extremely confusing .

when i give
System.out.println("IDEN ArrayObjectVALUE" +incidentNotificationVO.getAllLRNs());

incidentNotificationVO.getAllLRNs() returns a String[] object  (some garbage characters)

so how come length of String[] is zero ?

thanks

Commented:
strange

try casting it and getting the length

((String[]) incidentNotificationVO.getAllLRNs()).length

fargo

Author

Commented:
still shows zero

Commented:
Then you need to check the population of this array. This bean property is not getting set.

fargo

Author

Commented:
i checked the bean , its getting set since this works perfectly
for(int i=0;i <bean.getAllLRNs().length;i++  )
        {
           System.out.println("IDEN VALUE"+bean.getAllLRNs()[i]);
         }


setting from bean to value object is also fine since
for(int i=0;i <incidentNotificationVO.getAllLRNs().length;i++  )
        {
           System.out.println("IDEN VALUE"+incidentNotificationVO.getAllLRNs()[i]);
         }

works perfectly

BUT when i retrieve from the ValueObject it says array length is zero


CERTIFIED EXPERT
Top Expert 2016

Commented:
>>
when i give
System.out.println("IDEN ArrayObjectVALUE" +incidentNotificationVO.getAllLRNs());

incidentNotificationVO.getAllLRNs() returns a String[] object  (some garbage characters)
>>

That will print the array reference (empty or not)

Author

Commented:
hi cehj,

sorry, could not understand your question

 incidentNotificationVO.getAllLRNs() returns a String[] and prints some garbage on the console . i am assuming its the string[] object.
i want the individual string elements

thanks
CERTIFIED EXPERT
Top Expert 2016

Commented:
If you're using 1.5 you can do


System.out.println(Arrays.toString(incidentNotificationVO.getAllLRNs()));

but you need to check your setter is being called and that it's setting the property

Author

Commented:
no i dont see the toString() for Arrays

CERTIFIED EXPERT
Top Expert 2016

Commented:
Well that's not essential - you can iterate. It's your setter you need to be concerned about

Author

Commented:
ok .what  i dont understand is        incidentNotificationVO.getAllLRNs()   prints some garbage on the console, then

why does System.out.println("array length" +incidentNotificationVO.getAllLRNs()).length ) or
System.out.println ((String[]) incidentNotificationVO.getAllLRNs()).length)  show  zero
CERTIFIED EXPERT
Top Expert 2016

Commented:
>>ok .what  i dont understand is        incidentNotificationVO.getAllLRNs()   prints some garbage on the console

As i mentioned above, it will print the array reference irrespective of length

Author

Commented:
ok   so using this reference can i access the string arrayobject  or the string elements

thanks
CERTIFIED EXPERT
Top Expert 2016

Commented:
Not if the length is zero ;-)

Author

Commented:
oh man...u funny

Author

Commented:
problem description in detail

step 1 :: Building VO from formbean

 private IncidentsVO buildVOFromFormBean(ActionForm actionForm,
                                            HttpServletRequest req, String fromWhere) {

        IncidentsFormBean formBn = (IncidentsFormBean) actionForm;
        IncidentsVO incidentVO = new IncidentsVO();
String[] lrns = new String[lrnCount];
for (int i = 0; i < lrnCount; i++) {
                lrns[i] = req.getParameter("allLRNs" + i);
                  }

formBn.setAllLRNs(lrns); //constructed formbean

//setting VO from the constructed form bean
incidentNotificationVO.setAllLRNs(formBn.getAllLRNs());  

}

//next method..

Step 2:: building formbean from VO (just the reverse)

private void buildFormBeanFromIncidentsVO(IncidentsFormBean bn,
                                              IncidentsVO incidentsVO,
                                              HttpServletRequest req) throws
            DAOException {
             IncidentTypeVO incidentTypeVO = incidentsVO.getIncidentTypeVO();
 bn.setAllLRNs(incidentNotificationVO.getAllLRNs());
System.out.println("IDEN ArrayObjectVALUE" +incidentNotificationVO.getAllLRNs());   //shows array reference but i want the actual array and elements
}


any help would be greatly appreciated,
thanks

CERTIFIED EXPERT
Top Expert 2016

Commented:
Make sure lrnCount > 0

>>//shows array reference but i want the actual array and elements

As has been said before, you iterate it and print it, if there's anything to iterate
Mick BarryJava Developer
CERTIFIED EXPERT
Top Expert 2010

Commented:
The following will display the contents of your array (on any version of java):

System.out.println("IDEN ArrayObjectVALUE" +Arrays.asList(incidentNotificationVO.getAllLRNs()));

FWhen populating the array check the value of lrnCount
CERTIFIED EXPERT
Top Expert 2016
Commented:
>>FWhen populating the array check the value of lrnCount

Already mentioned
Mick BarryJava Developer
CERTIFIED EXPERT
Top Expert 2010
Commented:
try adding the following:

private IncidentsVO buildVOFromFormBean(ActionForm actionForm,
                                            HttpServletRequest req, String fromWhere) {

        IncidentsFormBean formBn = (IncidentsFormBean) actionForm;
        IncidentsVO incidentVO = new IncidentsVO();
        System.out.println("Adding "+lrnCount+" elements");
        String[] lrns = new String[lrnCount];
        for (int i = 0; i < lrnCount; i++) {
                lrns[i] = req.getParameter("allLRNs" + i);
                System.out.println(i+":"+lrns[i]);
        }
        ......

That will show you in the log whats getting read.
Mick BarryJava Developer
CERTIFIED EXPERT
Top Expert 2010

Commented:
Where do you set lrnCount?  Or should you be getting it from the request, something like:

lrnCount = Integer.parseInt(request.getParameter("lrnCount"));

Author

Commented:
>>>>should you be getting it from the request

yes exactly, its coming from the request. and "lrnCount" works  perfect.

CERTIFIED EXPERT
Top Expert 2016

Commented:
What's it's value?
CERTIFIED EXPERT
Top Expert 2016

Commented:
What's its value i mean ;-)

Author

Commented:
i am setting lrnCount in the jsp page and in my action class i am doing
int lrnCount = 0;
            if (req.getParameter("lrnCount") != null &&
                req.getParameter("lrnCount") != "") {
                lrnCount = Integer.parseInt(req.getParameter("lrnCount"));
                System.out.println("Adding "+lrnCount+" elements");

           
            }

so lrncount is either 2 if i enter 2 records or 3 if i enter 3 records.
CERTIFIED EXPERT
Top Expert 2016

Commented:
Let's take it step by step:

int lrnCount = 0;
String sLrnCount = req.getParameter("lrnCount");
if (sLrnCount != null && (sLrnCount = sLrnCount.trim()).length() > 0) {
      lrnCount = Integer.parseInt(sLrnCount);
      System.out.println("Adding "+lrnCount+" elements");
}

.........

for (int i = 0; i < lrnCount; i++) {
      lrns[i] = req.getParameter("allLRNs" + i);
      System.out.println("lrns[" + i + "]=" + lrns[i]);
}

Can you tell us what the above prints?

Author

Commented:



 if aaaaaaaaa is entered in the field value of lrns on browser

System.out.println("lrns[" + i + "]=" + lrns[i]);  would show
lrns[0]=aaaaaaaaa

and System.out.println("value of LRNS[i]" +req.getParameter("allLRNs" + i));
shows aaaaaaaaa
CERTIFIED EXPERT
Top Expert 2016

Commented:
>>would show

I need to know what it *does* show - not *would* show ;-)

Author

Commented:
sorry i meant "DOES" and not "would"

Author

Commented:
this is fine :
step 1
private IncidentsVO buildVOFromFormBean(ActionForm actionForm,
                                            HttpServletRequest req, String fromWhere) {

        IncidentsFormBean formBn = (IncidentsFormBean) actionForm;
        IncidentsVO incidentVO = new IncidentsVO();
String[] lrns = new String[lrnCount];
for (int i = 0; i < lrnCount; i++) {
                lrns[i] = req.getParameter("allLRNs" + i);
                  }

formBn.setAllLRNs(lrns); //constructed formbean

//setting VO from the constructed form bean
incidentNotificationVO.setAllLRNs(formBn.getAllLRNs());  

}


THE PROBLEM IS WITH STEP 2
Step 2:: building formbean from VO (just the reverse)

private void buildFormBeanFromIncidentsVO(IncidentsFormBean bn,
                                              IncidentsVO incidentsVO,
                                              HttpServletRequest req) throws
            DAOException {
             IncidentTypeVO incidentTypeVO = incidentsVO.getIncidentTypeVO();
 bn.setAllLRNs(incidentNotificationVO.getAllLRNs());

for(int i=0;i <incidentNotificationVO.getAllLRNs().length;i++  ) //this is not getting executed at all
        {
                    System.out.println("IDEN22 VALUE"+Arrays.asList(incidentNotificationVO.getAllLRNs()));
       
                 
       }



}

CERTIFIED EXPERT
Top Expert 2016

Commented:
>>IncidentsVO incidentVO = new IncidentsVO();

Nothing happens to that as far as i can see

Author

Commented:
do u think its the problem when the data comes back from database to incidentNotificationVO
CERTIFIED EXPERT
Top Expert 2016

Commented:
>>formBn.setAllLRNs(lrns);

Can you post the code for the above?
Mick BarryJava Developer
CERTIFIED EXPERT
Top Expert 2010

Commented:
checj that buildFormBeanFromIncidentsVO is getting called

Author

Commented:
its working now guys . I realized there was some problem with the data when it was returning back from database.

thanks very much, i greatly appreciate it.

J

CERTIFIED EXPERT
Top Expert 2016

Commented:
:-)
Mick BarryJava Developer
CERTIFIED EXPERT
Top Expert 2010

Commented:
no worries :)
Access more of Experts Exchange with a free account
Thanks for using Experts Exchange.

Create a free account to continue.

Limited access with a free account allows you to:

  • View three pieces of content (articles, solutions, posts, and videos)
  • Ask the experts questions (counted toward content limit)
  • Customize your dashboard and profile

*This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

OR

Please enter a first name

Please enter a last name

8+ characters (letters, numbers, and a symbol)

By clicking, you agree to the Terms of Use and Privacy Policy.