Day46

老样子,学习效率还行,蛮专注的,同时也是减肥的第一天,加油OVO。少吃碳水,多用脑子,脑子不用会生锈的。

Day46_EL表达式

 

EL 表达式

EL 表达式的全称是:Expression Language。是表达式语言。 EL 表达式的什么作用:

EL 表达式主要是代替 jsp 页面中的表达式脚本在 jsp 页面中进行数据的输出。 因为 EL 表达式在输出数据的时候,要比 jsp 的表达式脚本要简洁很多。

EL 表达式的格式是:${表达式}

EL 表达式在输出 null 值的时候,输出的是空串。jsp 表达式脚本输出 null 值的时候,输出的是 null 字符串。

 

EL表达式搜素域数据的顺序

当四个域中都有相同的key的数据的时候,EL表达式会按照四个域的从小到大的顺序取进行搜素,找到就输出。

pageContext - ->> request - ->> session - ->> application.

 

EL表达式——运算

image-20210505171641367

3.算数运算。加减乘除。

4.empty 运算 empty 运算可以判断一个数据是否为空,如果为空,则输出 true,不为空输出 false。 以下几种情况为空: 1、值为 null 值的时候,为空 2、值为空串的时候,为空 3、值是 Object 类型数组,长度为零的时候 4、list 集合,元素个数为零 5、map 集合,元素个数为零

5.三元运算 表达式 1?表达式 2:表达式 3 如果表达式 1 的值为真,返回表达式 2 的值,如果表达式 1 的值为假,返回表达式 3

示例:
${ 12 != 12 ? "真":"假" }

6 “.”点运算 和 [] 中括号运算符 .点运算,可以输出 Bean 对象中某个属性的值。

举例
输出 Person 的 name 属性:${p.name} <br>

[]中括号运算,可以输出有序集合中某个元素的值。

举例
输出 Person 的 List 集合中个别元素值:${p.cities[2]} <br>

并且[]中括号运算,还可以输出 map 集合中 key 里含有特殊字符的 key 的值。

举例,点运算和运算符,放在[]里,就可以输出包含特殊字符的key值。
<%
   Map<String,Object> map = new HashMap<String, Object>();
   map.put("a.a.a", "aaaValue");
   map.put("b+b+b", "bbbValue");
   map.put("c-c-c", "cccValue");
   request.setAttribute("map", map);
%>
  ${ map['a.a.a'] } <br>
  ${ map["b+b+b"] } <br>
  ${ map['c-c-c'] } <br>

 

EL 表达式的 11 个隐含对象

EL 个达式中 11 个隐含对象,是 EL 表达式中自己定义的,可以直接使用。
变量 类型 作用
pageContext PageContextImpl 它可以获取 jsp 中的九大内置对象

pageScope Map<String,Object> 它可以获取 pageContext 域中的数据
requestScope Map<String,Object> 它可以获取 Request 域中的数据
sessionScope Map<String,Object> 它可以获取 Session 域中的数据
applicationScope Map<String,Object> 它可以获取 ServletContext 域中的数据

param Map<String,String> 它可以获取请求参数的值
paramValues Map<String,String[]> 它也可以获取请求参数的值,获取多个值的时候使用。
header Map<String,String> 它可以获取请求头的信息
headerValues Map<String,String[]> 它可以获取请求头的信息,它可以获取多个值的情况
cookie Map<String,Cookie> 它可以获取当前请求的 Cookie 信息
initParam Map<String,String> 它可以获取在 web.xml 中配置<context-param>上下文参数

pageContext PageContextImpl 它可以获取 jsp 中的九大内置对象

   <%--
   request.getScheme() 它可以获取请求的协议
   request.getServerName() 获取请求的服务器 ip 或域名
   request.getServerPort() 获取请求的服务器端口号
   getContextPath() 获取当前工程路径
   request.getMethod() 获取请求的方式(GET POST)
   request.getRemoteHost() 获取客户端的 ip 地址
   session.getId() 获取会话的唯一标识
   --%>
  <%
       pageContext.setAttribute("req", request);
  %>
  <%=request.getScheme() %> <br>
  1.协议: ${ req.scheme }<br>
  2.服务器 ip:${ req.serverName }<br>
  3.服务器端口:${ req.serverPort }<br>
  4.获取工程路径:${ req.contextPath }<br>
  5.获取请求方法:${ req.method }<br>
  6.获取客户端 ip 地址:${ req.remoteHost }<br>
  7.获取会话的 id 编号:${ pageContext.session.id }<br>

EL 获取四个特定域中的属性 pageScope ====== pageContext 域 requestScope ====== Request 域 sessionScope ====== Session 域 applicationScope ====== ServletContext 域

 

EL 表达式其他隐含对象的使用 param Map <String,String> 它可以获取请求参数的值 paramValues Map<String,String[]> 它也可以获取请求参数的值,获取多个值的时候使用

    输出请求参数username的值:${param.username}<br>
  输出请求参数password的值:${param.password}<br>

  输出请求参数username的值: ${paramValues.username[0]}<br>
  输出请求参数hobby的值: ${paramValues.hobby[0]}<br>
  输出请求参数hobby的值: ${paramValues.hobby[1]}<br>

 

header Map<String,String> 它可以获取请求头的信息 headerValues Map<String,String[]> 它可以获取请求头的信息,它可以获取多个

    输出请求头【User-Agent】的值:${ header['User-Agent'] } <br>
  输出请求头【Connection】的值:${ header.Connection } <br>
  输出请求头【User-Agent】的值:${ headerValues['User-Agent'][0] } <br>

cookie Map<String ,Cookie> 它可以获取当前请求的 Cookie 信息

获取 Cookie 的名称:${ cookie.JSESSIONID.name } <br>
获取 Cookie 的值:${ cookie.JSESSIONID.value } <br>

 

initParam Map<String,String> 它可以获取在 web.xml 中配置的<context-param>上下文参数

输出&lt;  Context-param&gt;username 的值:   ${ initParam.username } <br>
输出&lt; Context-param&gt;url 的值: ${ initParam.url } <br>

 

JSTL

JSTL 标签库 全称是指 JSP Standard Tag Library JSP 标准标签库。是一个不断完善的开放源代码的 JSP 标 签库。 EL 表达式主要是为了替换 jsp 中的表达式脚本,而标签库则是为了替换代码脚本。这样使得整个 jsp 页面 变得更佳简洁。

1. <c:set />(使用很少)
作用:set 标签可以往域中保存数据
<%--
   域对象.setAttribute(key,value);
   scope 属性设置保存到哪个域
   page 表示 PageContext 域(默认值)
   request 表示 Request
   session 表示 Session
   application 表示 ServletContext
   var 属性设置 key 是多少
   value 属性设置值
--%>
  保存之前:${ sessionScope.abc } <br>
   <c:set scope="session" var="abc" value="abcValue"/>
  保存之后:${ sessionScope.abc } <br>

 

2. <c:if />
if 标签用来做 if 判断。
<%--
test 属性表示判断的条件(使用 EL 表达式输出)
--%>
<c:if test="${ 12 == 12 }">
<h1>12 等于 12</h1>
</c:if>
<c:if test="${ 12 != 12 }">
<h1>12 不等于 12</h1>
</c:if>

 

3..<c:choose> <c:when> <c:otherwise>标签
作用:多路判断。跟 switch ... case .... default 非常接近
<%--
   choose 标签开始选择判断
   when 标签表示每一种判断情况
   test 属性表示当前这种判断情况的值
   otherwise 标签表示剩下的情况
   <c:choose> <c:when> <c:otherwise>标签使用时需要注意的点:
   1、标签里不能使用 html 注释,要使用 jsp 注释
   2、when 标签的父标签一定要是 choose 标签
--%>

 

 

每日算法题

1.拥有糖果最多的儿童

给你一个数组candies和一个整数extraCandies,其中candies[i]代表第 i 个孩子拥有的糖果数目。

对每一个孩子,检查是否存在一种方案,将额外的extraCandies个糖果分配给孩子们之后,此孩子有 最多的糖果。

注意,允许有多个孩子同时拥有 最多的糖果数目

(自己想出来的,把错误的版本改造下就可以了)

package com.sorrymaker.day03;

import org.junit.Test;
import sun.nio.cs.SingleByte;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
* 给你一个数组candies和一个整数extraCandies,其中candies[i]代表第 i 个孩子拥有的糖果数目。
* 对每一个孩子,检查是否存在一种方案,将额外的extraCandies个糖果分配给孩子们之后,此孩子有 最多的糖果。
* 注意,允许有多个孩子同时拥有 最多的糖果数目
* @Author nextGame
* @Date 2021/5/5 18:59
* @Version 1.0
*/
public class Test01 {
  @Test
  public void test1(){
      int[] candies = {2,3,5,1,3};
      int extraCandies = 3;
      System.out.println(kidsWithCandies(candies, extraCandies));

  }
  public List<Boolean> kidsWithCandies(int[] candies, int extraCandies) {
      ArrayList<Integer> integers = new ArrayList<>();
      ArrayList<Boolean> list = new ArrayList<>();
      int max=0;
      for (int i = 0; i < candies.length; i++) {
          integers.add(candies[i]+extraCandies);
          if(max<candies[i]){
              max=candies[i];
          }
      }
      for (int num:integers){
          if(num>=max){
              list.add(true);
          }else {
              list.add(false);
          }
      }
      return list;
  }
}

//错误版本
public class Test01 {
   @Test
   public void test1(){
       int[] candies = {2,3,5,1,3};
       int extraCandies = 3;
       System.out.println(kidsWithCandies(candies, extraCandies));

  }
   public List<Boolean> kidsWithCandies(int[] candies, int extraCandies) {
       ArrayList<Integer> integers = new ArrayList<>();
       ArrayList<Boolean> list = new ArrayList<>();
       int max=0;
       for (int i = 0; i < candies.length; i++) {
           integers.add(candies[i]+extraCandies);
           System.out.println(integers);
      }

       for(int num : integers){
           while (num>max){
               max = num;
               System.out.println(max);
          }
      }
       for (int num:integers){
           if(num ==max){
               list.add(true);
          }else {
               list.add(false);
          }
      }
       System.out.println(list);
       return list;
  }
}

2.IP无效化

给你一个有效的 IPv4 地址 address,返回这个 IP 地址的无效化版本。

所谓无效化 IP 地址,其实就是用 "[.]" 代替了每个 "."

public String defangIPaddr(String address) {
   return address.replace(".", "[.]");
}

3.拿硬币

桌上有 n 堆力扣币,每堆的数量保存在数组 coins 中。我们每次可以选择任意一堆,拿走其中的一枚或者两枚,求拿完所有力扣币的最少次数。

public int minCount(int[] coins) {
   int count=0;
   for (int i = 0; i < coins.length; i++) {
       count += coins[i]/2+coins[i]%2;
  }
   return count;
}

4.replace,跟2一样。

明明做法跟第二题一样,我却想不出来,真的蠢逼他妈给蠢逼开门,蠢到家了。

package com.sorrymaker.day03;

import org.junit.Test;

/**请你设计一个可以解释字符串 command 的 Goal 解析器 。command 由 "G"、"()" 和/或 "(al)" 按某种顺序组成。
* Goal 解析器会将 "G" 解释为字符串 "G"、"()" 解释为字符串 "o" ,"(al)" 解释为字符串 "al" 。
* 然后,按原顺序将经解释得到的字符串连接成一个字符串。
* 给你字符串 command ,返回 Goal 解析器 对 command 的解释结果。
* @Author nextGame
* @Date 2021/5/5 20:26
* @Version 1.0
*/
public class Test04 {
   @Test
   public void test(){
       String command ="G()()(al)()()(al)(al)";
       System.out.println(interpret(command));

  }
   public String interpret(String command) {
       return command.replace("()","o").replace("(al)","al");
  }
}

Day46_EL表达式

 

EL 表达式

EL 表达式的全称是:Expression Language。是表达式语言。EL 表达式的什么作用:

EL 表达式主要是代替 jsp 页面中的表达式脚本在 jsp 页面中进行数据的输出。因为 EL 表达式在输出数据的时候,要比 jsp 的表达式脚本要简洁很多。

EL 表达式的格式是:${表达式}

EL 表达式在输出 null 值的时候,输出的是空串。jsp 表达式脚本输出 null 值的时候,输出的是 null 字符串。

 

EL表达式搜素域数据的顺序

当四个域中都有相同的key的数据的时候,EL表达式会按照四个域的从小到大的顺序取进行搜素,找到就输出。

pageContext - ->> request - ->> session - ->> application.

 

EL表达式——运算

image-20210505171641367

3.算数运算。加减乘除。

4.empty 运算empty 运算可以判断一个数据是否为空,如果为空,则输出 true,不为空输出 false。以下几种情况为空:1、值为 null 值的时候,为空2、值为空串的时候,为空3、值是 Object 类型数组,长度为零的时候4、list 集合,元素个数为零5、map 集合,元素个数为零

5.三元运算表达式 1?表达式 2:表达式 3如果表达式 1 的值为真,返回表达式 2 的值,如果表达式 1 的值为假,返回表达式 3

示例:
${ 12 != 12 ? "真":"假" }

6 “.”点运算 和 [] 中括号运算符.点运算,可以输出 Bean 对象中某个属性的值。

举例
输出 Person 的 name 属性:${p.name} <br>

[]中括号运算,可以输出有序集合中某个元素的值。

举例
输出 Person 的 List 集合中个别元素值:${p.cities[2]} <br>

并且[]中括号运算,还可以输出 map 集合中 key 里含有特殊字符的 key 的值。

举例,点运算和运算符,放在[]里,就可以输出包含特殊字符的key值。
<%
   Map<String,Object> map = new HashMap<String, Object>();
   map.put("a.a.a", "aaaValue");
   map.put("b+b+b", "bbbValue");
   map.put("c-c-c", "cccValue");
   request.setAttribute("map", map);
%>
  ${ map['a.a.a'] } <br>
  ${ map["b+b+b"] } <br>
  ${ map['c-c-c'] } <br>

 

EL 表达式的 11 个隐含对象

EL 个达式中 11 个隐含对象,是 EL 表达式中自己定义的,可以直接使用。
变量 类型 作用
pageContext PageContextImpl 它可以获取 jsp 中的九大内置对象

pageScope Map<String,Object> 它可以获取 pageContext 域中的数据
requestScope Map<String,Object> 它可以获取 Request 域中的数据
sessionScope Map<String,Object> 它可以获取 Session 域中的数据
applicationScopeMap<String,Object> 它可以获取 ServletContext 域中的数据

param Map<String,String> 它可以获取请求参数的值
paramValues Map<String,String[]> 它也可以获取请求参数的值,获取多个值的时候使用。
header Map<String,String>它可以获取请求头的信息
headerValues Map<String,String[]>它可以获取请求头的信息,它可以获取多个值的情况
cookie Map<String,Cookie> 它可以获取当前请求的 Cookie 信息
initParam Map<String,String> 它可以获取在 web.xml 中配置<context-param>上下文参数

pageContext PageContextImpl 它可以获取 jsp 中的九大内置对象

   <%--
   request.getScheme() 它可以获取请求的协议
   request.getServerName() 获取请求的服务器 ip 或域名
   request.getServerPort() 获取请求的服务器端口号
   getContextPath() 获取当前工程路径
   request.getMethod() 获取请求的方式(GET POST)
   request.getRemoteHost() 获取客户端的 ip 地址
   session.getId() 获取会话的唯一标识
   --%>
  <%
       pageContext.setAttribute("req", request);
  %>
  <%=request.getScheme() %> <br>
  1.协议: ${ req.scheme }<br>
  2.服务器 ip:${ req.serverName }<br>
  3.服务器端口:${ req.serverPort }<br>
  4.获取工程路径:${ req.contextPath }<br>
  5.获取请求方法:${ req.method }<br>
  6.获取客户端 ip 地址:${ req.remoteHost }<br>
  7.获取会话的 id 编号:${ pageContext.session.id }<br>

EL 获取四个特定域中的属性pageScope ====== pageContext 域requestScope ====== Request 域sessionScope ====== Session 域applicationScope ====== ServletContext 域

 

EL 表达式其他隐含对象的使用param Map<String,String>它可以获取请求参数的值paramValues Map<String,String[]> 它也可以获取请求参数的值,获取多个值的时候使用

    输出请求参数username的值:${param.username}<br>
  输出请求参数password的值:${param.password}<br>

  输出请求参数username的值:${paramValues.username[0]}<br>
  输出请求参数hobby的值:${paramValues.hobby[0]}<br>
  输出请求参数hobby的值:${paramValues.hobby[1]}<br>

 

header Map<String,String> 它可以获取请求头的信息headerValuesMap<String,String[]> 它可以获取请求头的信息,它可以获取多个

    输出请求头【User-Agent】的值:${ header['User-Agent'] } <br>
  输出请求头【Connection】的值:${ header.Connection } <br>
  输出请求头【User-Agent】的值:${ headerValues['User-Agent'][0] } <br>

cookie Map<String ,Cookie> 它可以获取当前请求的 Cookie 信息

获取 Cookie 的名称:${ cookie.JSESSIONID.name } <br>
获取 Cookie 的值:${ cookie.JSESSIONID.value } <br>

 

initParam Map<String,String> 它可以获取在 web.xml 中配置的<context-param>上下文参数

输出&lt;Context-param&gt;username 的值:${ initParam.username } <br>
输出&lt;Context-param&gt;url 的值:${ initParam.url } <br>

 

JSTL

JSTL 标签库 全称是指 JSP Standard Tag Library JSP 标准标签库。是一个不断完善的开放源代码的 JSP 标签库。EL 表达式主要是为了替换 jsp 中的表达式脚本,而标签库则是为了替换代码脚本。这样使得整个 jsp 页面变得更佳简洁。

1. <c:set />(使用很少)
作用:set 标签可以往域中保存数据
<%--
   域对象.setAttribute(key,value);
   scope 属性设置保存到哪个域
   page 表示 PageContext 域(默认值)
   request 表示 Request
   session 表示 Session
   application 表示 ServletContext
   var 属性设置 key 是多少
   value 属性设置值
--%>
  保存之前:${ sessionScope.abc } <br>
   <c:set scope="session" var="abc" value="abcValue"/>
  保存之后:${ sessionScope.abc } <br>

 

2. <c:if />
if 标签用来做 if 判断。
<%--
test 属性表示判断的条件(使用 EL 表达式输出)
--%>
<c:if test="${ 12 == 12 }">
<h1>12 等于 12</h1>
</c:if>
<c:if test="${ 12 != 12 }">
<h1>12 不等于 12</h1>
</c:if>

 

3..<c:choose> <c:when> <c:otherwise>标签
作用:多路判断。跟 switch ... case .... default 非常接近
<%--
   choose 标签开始选择判断
   when 标签表示每一种判断情况
   test 属性表示当前这种判断情况的值
   otherwise 标签表示剩下的情况
   <c:choose> <c:when> <c:otherwise>标签使用时需要注意的点:
   1、标签里不能使用 html 注释,要使用 jsp 注释
   2、when 标签的父标签一定要是 choose 标签
--%>

 

 

每日算法题

1.拥有糖果最多的儿童

给你一个数组candies和一个整数extraCandies,其中candies[i]代表第 i 个孩子拥有的糖果数目。

对每一个孩子,检查是否存在一种方案,将额外的extraCandies个糖果分配给孩子们之后,此孩子有 最多的糖果。

注意,允许有多个孩子同时拥有 最多的糖果数目

(自己想出来的,把错误的版本改造下就可以了)

package com.sorrymaker.day03;

import org.junit.Test;
import sun.nio.cs.SingleByte;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
* 给你一个数组candies和一个整数extraCandies,其中candies[i]代表第 i 个孩子拥有的糖果数目。
* 对每一个孩子,检查是否存在一种方案,将额外的extraCandies个糖果分配给孩子们之后,此孩子有 最多的糖果。
* 注意,允许有多个孩子同时拥有 最多的糖果数目
* @Author nextGame
* @Date 2021/5/5 18:59
* @Version 1.0
*/
public class Test01 {
  @Test
  public void test1(){
      int[] candies = {2,3,5,1,3};
      int extraCandies = 3;
      System.out.println(kidsWithCandies(candies, extraCandies));

  }
  public List<Boolean> kidsWithCandies(int[] candies, int extraCandies) {
      ArrayList<Integer> integers = new ArrayList<>();
      ArrayList<Boolean> list = new ArrayList<>();
      int max=0;
      for (int i = 0; i < candies.length; i++) {
          integers.add(candies[i]+extraCandies);
          if(max<candies[i]){
              max=candies[i];
          }
      }
      for (int num:integers){
          if(num>=max){
              list.add(true);
          }else {
              list.add(false);
          }
      }
      return list;
  }
}

//错误版本
public class Test01 {
   @Test
   public void test1(){
       int[] candies = {2,3,5,1,3};
       int extraCandies = 3;
       System.out.println(kidsWithCandies(candies, extraCandies));

  }
   public List<Boolean> kidsWithCandies(int[] candies, int extraCandies) {
       ArrayList<Integer> integers = new ArrayList<>();
       ArrayList<Boolean> list = new ArrayList<>();
       int max=0;
       for (int i = 0; i < candies.length; i++) {
           integers.add(candies[i]+extraCandies);
           System.out.println(integers);
      }

       for(int num : integers){
           while (num>max){
               max = num;
               System.out.println(max);
          }
      }
       for (int num:integers){
           if(num ==max){
               list.add(true);
          }else {
               list.add(false);
          }
      }
       System.out.println(list);
       return list;
  }
}

2.IP无效化

给你一个有效的 IPv4 地址 address,返回这个 IP 地址的无效化版本。

所谓无效化 IP 地址,其实就是用 "[.]" 代替了每个 "."

public String defangIPaddr(String address) {
   return address.replace(".", "[.]");
}

3.拿硬币

桌上有 n 堆力扣币,每堆的数量保存在数组 coins 中。我们每次可以选择任意一堆,拿走其中的一枚或者两枚,求拿完所有力扣币的最少次数。

public int minCount(int[] coins) {
   int count=0;
   for (int i = 0; i < coins.length; i++) {
       count += coins[i]/2+coins[i]%2;
  }
   return count;
}

4.replace,跟2一样。

明明做法跟第二题一样,我却想不出来,真的蠢逼他妈给蠢逼开门,蠢到家了。

package com.sorrymaker.day03;

import org.junit.Test;

/**请你设计一个可以解释字符串 command 的 Goal 解析器 。command 由 "G"、"()" 和/或 "(al)" 按某种顺序组成。
* Goal 解析器会将 "G" 解释为字符串 "G"、"()" 解释为字符串 "o" ,"(al)" 解释为字符串 "al" 。
* 然后,按原顺序将经解释得到的字符串连接成一个字符串。
* 给你字符串 command ,返回 Goal 解析器 对 command 的解释结果。
* @Author nextGame
* @Date 2021/5/5 20:26
* @Version 1.0
*/
public class Test04 {
   @Test
   public void test(){
       String command ="G()()(al)()()(al)(al)";
       System.out.println(interpret(command));

  }
   public String interpret(String command) {
       return command.replace("()","o").replace("(al)","al");
  }
}
posted @ 2021-05-05 20:54  独眼龙  阅读(103)  评论(0)    收藏  举报