Convert typed-in Text to lowercase

和自甴很熟 提交于 2019-12-04 05:08:57

问题


I've got an index.jsp with

[snip]

<% 
  String name = request.getParameter("name");
  String pass = request.getParameter("pass");
  String globalname = "webeng";
  String globalpass = "2009";
  if (name !=null && pass!=null && name.equals(globalname) && pass.equals(globalpass))
   {
   %>
    <hr />
    <p><b>Howdy, <%= request.getParameter("name") %></b></p>
    <hr />
<% }
  else if (name !=null | pass!=null && name.equals("") | pass.equals(""))
  {
  %>
    <hr />
    <p><b>Ooops, one or more fields are empty. Please fill everything out!!</b></p>
    <hr />
<% }
  else if (name !=null | pass!=null && !name.equals(globalname) | !pass.equals(globalpass))
  {
  %>
    <hr />
    <p><b>Incorrect Userdata!</b></p>
    <hr />
<% }
  else{
  }
%>

[snip]

Now, the globalname for example is in lowercase "webeng". Folks may type in "WebEng", "webENG", "WEBENG" and variations thereof.

I need those typed in Strings converted to lowercase. Somehow

String newname = name.toLowerCase();
String newpass = pass.toLowerCase();

is not working. Anybody got any idea?

This is what Eclipse tells me when I use

<% 
      String name = request.getParameter("name");
      String pass = request.getParameter("pass");
      String globalname = "webeng";
      String globalpass = "2009";
      String newname = name.toLowerCase();
      String newpass = pass.toLowerCase();

       if (name !=null && pass!=null && name.equals(globalname) && pass.equals(globalpass))
       {
       %>
        <hr />
        <p><b>Howdy, <%= request.getParameter("name") %></b></p>
        <hr />
    <% }
      else if (name !=null | pass!=null && name.equals("") | pass.equals(""))
      {
      %>
        <hr />
        <p><b>One or more fields are empty!</b></p>
        <hr />
    <% }
      else if (name !=null && pass!=null && !name.equals(globalname) | !pass.equals(globalpass))
      {
      %>
        <hr />
        <p><b>Incorrect Userdata!</b></p>
        <hr />
    <% }
      else{
      }
    %>

Eclipse: http://i.imagehost.org/0277/2009-11-15_19_34_00.png


回答1:


Your code logic is odd. Scriptlets also doesn't make testing more easy. Here's an SSCCE in flavor of a real Java class to kickoff and ease testing:

public class Test {

    public static void main(String[] args) throws Exception {
        String user = "WeBeNg"; // Change this as if it is user input.
        String pass = "2009"; // Change this as if it is user input.

        String expectedUser = "webeng";
        String expectedPass = "2009";

        if (user == null || pass == null || user.isEmpty() || pass.isEmpty()) {
            System.out.println("Please enter both username and password.");
        } else if (user.equalsIgnoreCase(expectedUser) && pass.equals(expectedPass)) {
            System.out.println("Welcome " + user);
        } else {
            System.out.println("Unknown login.");
        }
    }

}

Hope this helps.

Edit #1: please do not post screenshots. Copypaste the exception and stacktrace in code blocks. The exception is by the way not coming from Eclipse. It's coming from Tomcat. Also, the exception in question (NullPointerException) is fairly self-explaining. You accessed an object reference which is actually null.

SomeObject someObject = null;
someObject.doSomething(); // Fails with NPE.
someObject = new SomeObject();
someObject.doSomething(); // Succes.

You need to do a null-check first, e.g.

if (someObject != null) {
    someObject.doSomething(); // Succes.
} 

Edit #2 I also recommend you to learn about operators, operator precedence and expression grouping in Java. See, the following isn't "logical"

if (name !=null | pass!=null && name.equals("") | pass.equals(""))

Here's a good tutorial to start with to learn about this: http://java.sun.com/docs/books/tutorial/java/nutsandbolts/operators.html Good luck.




回答2:


You can use compareToIgnoreCase and you don't have to do the conversion yourself.




回答3:


You seem to use | in stead of || . Is that intentional?




回答4:


Here it is with equalsIgnoreCase. Unless you really don't want to shortcut the or with the | operator it's generally safer to go with ||. I also prefer not to fall through to success as in BalusC's answer, there is something unsettling about the default condition being to "login" the user.

<% 
String name = request.getParameter("name");
String pass = request.getParameter("pass");
String globalname = "webeng";
String globalpass = "2009";
if (name ==null || pass==null || name.equals("") || pass.equals("")) {
// You can use StringUtils.isBlank here instead if you have it available to you
 %>
<hr />
 <p><b>Ooops, one or more fields are empty. Please fill everything out!!</b></p>
 <hr />
<% } else if (name.equalsIgnoreCase(globalname) && pass.equalsIgnoreCase(globalpass))
 {
 %>
  <hr />
   <p><b>Howdy, <%= request.getParameter("name") %></b></p>
  <hr />
<% } else {
 %>
  <hr />
   <p><b>Incorrect Userdata!</b></p>
  <hr />
 }
%>


来源:https://stackoverflow.com/questions/1738294/convert-typed-in-text-to-lowercase

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!