reading elements from string array

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
LVL 10
jaggernatAsked:
Who is Participating?

[Product update] Infrastructure Analysis Tool is now available with Business Accounts.Learn More

x
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

fargoCommented:
you have to iterate over the string array.

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

fargo
jaggernatAuthor 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"
fargoCommented:
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
Amazon Web Services

Are you thinking about creating an Amazon Web Services account for your business? Not sure where to start? In this course you’ll get an overview of the history of AWS and take a tour of their user interface.

jaggernatAuthor 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
fargoCommented:
strange

try casting it and getting the length

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

fargo
jaggernatAuthor Commented:
still shows zero
fargoCommented:
Then you need to check the population of this array. This bean property is not getting set.

fargo

jaggernatAuthor 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


CEHJCommented:
>>
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)
jaggernatAuthor 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
CEHJCommented:
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
jaggernatAuthor Commented:
no i dont see the toString() for Arrays

CEHJCommented:
Well that's not essential - you can iterate. It's your setter you need to be concerned about
jaggernatAuthor 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
CEHJCommented:
>>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
jaggernatAuthor Commented:
ok   so using this reference can i access the string arrayobject  or the string elements

thanks
CEHJCommented:
Not if the length is zero ;-)
jaggernatAuthor Commented:
oh man...u funny
jaggernatAuthor 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

CEHJCommented:
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 DeveloperCommented:
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
CEHJCommented:
>>FWhen populating the array check the value of lrnCount

Already mentioned

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
Mick BarryJava DeveloperCommented:
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 DeveloperCommented:
Where do you set lrnCount?  Or should you be getting it from the request, something like:

lrnCount = Integer.parseInt(request.getParameter("lrnCount"));
jaggernatAuthor Commented:
>>>>should you be getting it from the request

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

CEHJCommented:
What's it's value?
CEHJCommented:
What's its value i mean ;-)
jaggernatAuthor 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.
CEHJCommented:
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?
jaggernatAuthor 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
CEHJCommented:
>>would show

I need to know what it *does* show - not *would* show ;-)
jaggernatAuthor Commented:
sorry i meant "DOES" and not "would"
jaggernatAuthor 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()));
       
                 
       }



}

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

Nothing happens to that as far as i can see
jaggernatAuthor Commented:
do u think its the problem when the data comes back from database to incidentNotificationVO
CEHJCommented:
>>formBn.setAllLRNs(lrns);

Can you post the code for the above?
Mick BarryJava DeveloperCommented:
checj that buildFormBeanFromIncidentsVO is getting called
jaggernatAuthor 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

CEHJCommented:
:-)
Mick BarryJava DeveloperCommented:
no worries :)
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Java

From novice to tech pro — start learning today.