① string怎麼去掉字元串裡面的所有空格
string怎麼去掉字元串裡面的所有空格?
字元串,是java中最常用的一個數據類型了。我們在日常開發時候會經常使用字元串做很多的操作。比如字元串的拼接、截斷、替換等。
本文我們介紹一個比較常見又容易被忽略的一個操作,那就是移除字元串中的空格。
其實,在Java中從字元串中刪除空格有很多不同的方法,如trim,replaceAll等。但是,在Java 11添加了一些新的功能,如strip、stripLeading、stripTrailing等。
大多數時候,我們只是使用trim方法來刪除多餘的空格。但是好像很多人並沒有去思考過,是否有更好的方式呢?
當然,trim()在大多數情況下都工作得很好,但是Java中有許多不同的方法。每一種都有自己的優點和缺點。我們如何決定哪種方法最適合我們呢?
接下來我們將介紹幾種方法,並對比下他們的區別和優缺點等。
在java中從字元串中刪除空格的不同方法
首先,我們來看一下,想要從String中移除空格部分,有多少種方法,作者根據經驗,總結了以下7種(JDK原生自帶的方法,不包含第三方工具類庫中的類似方法):
trim() : 刪除字元串開頭和結尾的空格。
strip() : 刪除字元串開頭和結尾的空格。
stripLeading() : 只刪除字元串開頭的空格
stripTrailing() : 只刪除字元串的結尾的空格
replace() : 用新字元替換所有目標字元
replaceAll() : 將所有匹配的字元替換為新字元。此方法將正則表達式作為輸入,以標識需要替換的目標子字元串
replaceFirst() : 僅將目標子字元串的第一次出現的字元替換為新的字元串
需要注意的最重要的一點是,在Java中String對象是不可變的,這意味著我們不能修改字元串,因此以上所有的方法我們得到的都是一個新的字元串。
接下啦,我們分別針對以上這幾個方法學習下用法,了解下其特性。
PS:本文代碼都是使用在線運行工具(https://www.jdoodle.com/online-java-compiler/ )執行的,因為我的測試機並未安裝Java 11,並且Unicode字元也不完整。如果大家也想實驗,建議使用在線工具,選擇對應的JDK即可。
② 怎樣去掉 java BigDecimal 類對象後面沒用的零
import java.util.*;
import java.math.*;
public class Main {
public static void main(String[] args)
{
Scanner cin = new Scanner(System.in);
while(cin.hasNext()) {
BigDecimal a,b,c;
a = cin.nextBigDecimal();
b = cin.nextBigDecimal();
c = a.add(b).stripTrailingZeros();
if(c.compareTo(BigDecimal.ZERO)==0) System.out.println(0);
else {String str = c.toPlainString();
System.out.println(str);}
}
}
}
這是a+b任意位數處理 其中stripTrailingZeros()函數是去後面的0,但是如果輸入的是是0.000.......(很多0)就不會捨去後面的0,還會出現科學計數,把他轉換成字元串就不會出現科學計數了。本人也剛剛學JAVA,主要用來大數處理,如果還有什麼不懂,可以問我。
③ 學習Java,都有哪些課程內容
學習java部分學習內容有字元串的相關函數,比如字元串拼接函數,分割函數,打亂函數等。
1.確保堆棧上至少有 n 個額外空位。如果不能把堆棧擴展到相應的尺寸,函數返回假。 失敗的原因包括將把棧擴展到比固定最大尺寸還大 (至少是幾千個元素)或分配內存失敗。 這個函數永遠不會縮小堆棧;
void lua_close (lu a_State *L);
2.銷毀指定 Lua 狀態機中的所有對象 (如果有垃圾收集相關的元方法的話,會調用它們),並且釋放狀態機中使用的所有動態內存。 在一些平台上,你可以不必調用這個函數, 因為當宿主程序結束的時候,所有的資源就自然被釋放掉了。 另一方面,長期運行的程序,比如一個後台程序或是一個網站伺服器, 會創建出多個 Lua 狀態機。那麼就應該在不需要時趕緊關閉它們。
lu a_compare
int lu a_compare (lua_State *L, int index1, int index2, int op);
比較兩個 Lua 值。 當索引 index1 處的值通過 op 和索引 index2 處的值做比較後條件和叢滿足,函數返回 1 。 這個函數遵循 Lua 對應的操作規則(即有可能觸發元方法)。 反之,函數返回 0。 當任何一個索引無效時,函數也會返回 0 。
3.連接棧頂的 n 個值, 然後將這些值出棧,並把結果放在棧頂。如果 n 為 1 ,結果就是那個值放在棧上(即,函數什麼都不做); 如果 n 為 0 ,結果是一個空串。 連接依照 Lua 中通常語義完成()。
lua_
void lu a_ (lua_State *L, int fromidx, int toidx);
從索引 fromidx 處復制一個值到一個有效索引 toidx 處,覆蓋那裡的原有值。 不會影響其它位置的值。
l ua_createtable
void l ua_createtable (lua_State *L, int narr, int nrec);
4.創建一張新的空表壓棧。 參數 narr 建議了這張表作為序列使用時會指棚嫌有多少個元素;參數 nrec 建議了這張表可能擁有多少序列之外的元素。 Lua 會使用這些建議來預分配這張新表。 如果你知道這張表用途的更多信息,預分配可以提高性能。 否則,你可以使用函數
lua_mp
把函數導出成二進制代碼塊 。 函數接收棧頂的 Lu a 函數做參數, 然後生成它的二進制代碼塊。 若被導出的東西被再次載入, 載入的結果就相當於原來的函數。 當它在產生代碼塊的時候, lua_mp 通過調用函數 writer (r ) 來寫入數據,後面的 data 參數會被傳入 writer 。
5.如果唯手 strip 為真, 二進制代碼塊將不包含該函數的調試信息。
最後一次由 writer 的返回值將作為這個函數的返回值返回; 0 表示沒有錯誤。
該函數不會把 Lua 函數彈出堆棧。
希望能幫到你,謝謝!
④ java3d 貼圖只有顏色,沒有紋理
TriangleStripArray tri = new TriangleStripArray(44,TriangleStripArray.COORDINATES|TriangleStripArray.COLOR_3,sCount);
這句規定了只有顏色(TriangleStripArray.COLOR_3),而不是用貼圖。所以後面有關貼圖的語句寫了也沒用。
可以改成類似以下的語句,
TriangleArray tri = new TriangleArray(24, TriangleArray.COORDINATES| TriangleArray.TEXTURE_COORDINATE_2);
float[] texCoord = { 0.0f, 0.0f,1.0f, 0.0f,......}
tri.setTextureCoordinates(0,0, texCoord);
......
注意是texCoord是貼圖的坐標,就是規定貼圖如何貼到幾何平面上。
相關內容網上不少,搜下就好
⑤ 求助大神:java 中 現有一個list 要取出list中所有元素拼接成字元串以逗號隔開應該如何做
publicclassTest{
publicstaticvoidmain(String[]args){
List<String>list=newArrayList<>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
Stringstr="";
for(inti=0;i<list.size();i++){
str+=list.get(i)+",";
}
System.out.println(str);
}
}
⑥ java中小數怎麼四捨五入
按照你的要求為不確定保留幾位小數的字元串做四捨五入的Java程序如下
import java.math.BigDecimal;
public class A {
public static void main(String[] args) {
String s="0.00000999999997";
//四捨五入,length是小數位數
int length=s.substring(s.indexOf(".")+1).length();
String s1=String.format("%."+(length-1)+"f",new BigDecimal(s));
//去尾部0
BigDecimal bd=new BigDecimal(s1).stripTrailingZeros();
System.out.println(bd.toPlainString());
}
}
⑦ java什麼函數跟python里的strip作用一樣
我記得是去掉 文本中句子開頭與結尾的符號的。因為在文本中每行開頭都有個"/n",代表換行。(印象中是這樣的) 一般是 for line in file: line.strip().split() 這樣就把每行的每個字元一個個分開,變成一個list。 好久沒碰了,你可以試試
⑧ 阿里雲 怎麼使用smarty
1,capture標簽
capture的中文意思是抓取,它的作用是抓取模板輸出的數據,當我們需要它的時候,調用它,以得到抓取數據的目的。例子:
Java代碼
{capture name=test}
<img src="testimg.jpg">
{/capture}
<div class="image">
{$smarty.capture.test}
</div>
說明:
在{capture name="test"}和{/capture}之間的內容被存儲到變數$test中,該變數由name屬性指定.在模板中通過 $smarty.capture.test 訪問該變數.如果沒有指定name 屬性,函數默認將使用"default" 作為參數,這一點很jQuery中的clone
2,config_load標簽
config_load可以直接將文件中的內容讀取出來,這樣可以省掉assign這一步。
Java代碼
test.csv:
pageTitle = "config_load_test"
bodyBgColor = "#eeeeee"
img = "girl.jpg"
width="100"
height="100"
index.tpl:
{config_load file="test.csv"}
<html>
<title>{#pageTitle#}</title>
<body bgcolor="{#bodyBgColor#}">
<img src="{#img#}" width="{#width#}" height="{#height#}">
</body>
</html>
上述過程中如果出現這樣的問題Warning: Smarty error: unable to read resource, 請查看一下,你的test.csv是不是放在smarty的配置目錄中,默認配置目錄是configs
Java代碼
/**
* The directory where config files are located.
*
* @var string
*/
var $config_dir = 'configs';
3,literal標簽的使用
做web開發,難免會寫一些JS,css,jquery代碼。js和jquery裡面都會{}這樣的符號,smarty會不會把它理解成php的變數呢?如果你不加literal標簽的話,smarty肯定會把它理解變數了,加了就不會,例如:
Java代碼
{literal}
function getAbsLeft(e){
var l=e.offsetLeft;
while(e=e.offsetParent)l+=e.offsetLeft;
return l;
}
function getAbsTop(e){
var t=e.offsetTop;
while(e=e.offsetParent)t+=e.offsetTop;
return t;
}
{/literal}
{literal}
<style type="text/css">
body {
color: #FFF;
}
</style>
{/literal}
4,php標簽
smarty模版使用php標簽,如何獲取模版變數.模版變數全部存在smarty的一個對象裡面
Java代碼
{php}
$assign = $this->_tpl_vars[assign];
{/php}
當你習慣了assign後,你有沒有想過,在模板文件裡面直接寫php代碼呢 ,我想有的時候你肯定很想吧。例如:
Java代碼
{php}
global $result;
foreach($result as $key=>$value){
echo "key=$key,value=>$value<br>";
}
{/php}
5 strip標簽
strip標簽去除標簽內的空格和回車,這一點我覺得,做手機開發的朋友肯定用的到,因為全形空格有可能會導致整個頁面錯亂,甚至是一個空白頁面。手機屏幕小,估計用smarty的可能性也比較小。
Java代碼
{strip}
<div>
<font color="red">strip</font>
</div>
{/strip}
6,fetch標簽
fetch標簽根php的file_get_contents挺想的,都可以把文件中的內容讀出來,並且是個字元串的形勢
Java代碼
{fetch file="./aaaa.txt" assign="result"}
{if is_array($result)}
<b>is array</b>
{else if}
<b>not array</b>
{/if}
7,smarty調用php函數
smarty模板里調用php的內置函數{'param1'|functionName:'param2':'param3'}
Java代碼
{$colname|trim} //or {trim($colname)}
{$colname|iconv:'utf-8':'gbk'}
echo trim(param1)
調用自定義的php函數$smarty->register_function('len',"customerfunction");
8.smarty保留變數
Java代碼
{$smarty.get.page} {* PHP方式:$_GET["page"] *}
{$smarty.post.page} {* PHP方式:$_POST["page"] *}
{$smarty.cookies.username} {* PHP方式:$_COOKIE["username"] *}
{$smarty.session.id} {* PHP方式:$_SESSION["id"] *}
{$smarty.server.SERVER_NAME} {* PHP方式:$_SERVER["SERVER_NAME"] *}
{$smarty.env.PATH} {* PHP方式:$_ENV["PATH"] *}
{$smarty.request.username} {* PHP方式:$_REQUEST["username"] *}
{$smarty.const.__FILE__} {* 通過保留變數數組直接輸出系統常量 *}
{$smarty.now|date_format:'%Y-%m-%d %H:%M:%S'} {* 取得當前時間戳 *}
9.用於在模板執行過程中設置模板變數
Java代碼
{assign var='foo' value='Smarty'}
10.當變數為空時,設置默認值
Java代碼
{$var|default:"no value"}
{section name = name loop = $varName[, start = $start, step = $step, max = $max, show = true]}
name: section的名稱,不用加$
$loop: 要循環的變數,在程序中要使用assign對這個變數進行操作。
$start: 開始循環的下標,循環下標默認由0開始
$step: 每次循環時下標的增數
$max: 最大循環下標
$show: boolean類型,決定是否對這個塊進行顯示,默認為true
循環下標:實際它的英文名稱為index,是索引的意思,這里我將它譯成"下標",主要是為了好理解。它表示在顯示這個循環塊時當前的循環索引,默認從0 開始,受$start的影響,如果將$start設為5,它也將從5開始計數,在模板設計部分我們使用過它,這是當前{section}的一個屬性,調用 方式為Smarty.section.sectionName.index,這里的sectionName指的是函數原型中的name屬性。
{section}塊具有的屬性值,分別為:
1. index: 上邊我們介紹的"循環下標",默認為0
2. index_prev: 當前下標的前一個值,默認為-1
3. index_next: 當前下標的下一個值,默認為1
4. first: 是否為第一下循環
5. last: 是否為最後一個循環
6. iteration: 循環次數
7. rownum: 當前的行號,iteration的另一個別名
8. loop: 最後一個循環號,可用在section塊後統計section的循環次數
9. total: 循環次數,可用在section塊後統計循環次數
Java代碼
{section name=loop loop=2019 start=2019 step=-1 } //2019=>2000
{if $smarty.section.loop.iteration<=19}
<option value="{$smarty.section.loop.index}">{$smarty.section.loop.index}</option>
{/if}
{/section}
asfdas
⑨ 上課要求jdk版本1.8.0而我的版本是jdk11,有什麼區別
jdk版本迭代都是根據上一代進行增添新功能。djk11在1.8版本上只是添加了少許新內容以適應現在互聯網技術節奏,除了新添加的內容,兩者沒有什麼影響。也就是,如果不用到新添加的內容,運行不受影響。但是需要知道,有哪些內容是新的。
JDK1.8的新特性:
一、介面的默認方法Java 8允許我們給介面添加一個非抽象的方法實現,只需要使用 default關鍵字即可,這個特徵又叫做擴展方法。
二、Lambda 表達式在Java 8 中你就沒必要使用這種傳統的匿名對象的方式了,Java 8提供了更簡潔的語法,lambda表達式:
Collections.sort(names, (String a, String b) -> {return b.compareTo(a);});
三、函數式介面Lambda表達式是如何在java的類型系統中表示的,每一個lambda表達式都對應一個類型,通常是介面類型。
而「函數式介面」是指僅僅只包含一個抽象方法的介面,每一個該類型的lambda表達式都會被匹配到這個抽象方法。因為默認方法不算抽象方法,所以也可以函數式介面添加默認方法。
四、方法與構造函數引用Java 8 允許你使用 :: 關鍵字來傳遞方法或者構造函數引用,上面的代碼展示了如何引用一個靜態方法,我們也可以引用一個對象的方法:
converter = something::startsWith;
String converted = converter.convert("Java");
System.out.println(converted);
五、Lambda 作用域在lambda表達式中訪問外層作用域和老版本的匿名對象中的方式很相似。你可以直接訪問標記了final的外層局部變數,或者實例的欄位以及靜態變數。
六、訪問局部變數可以直接在lambda表達式中訪問外層的局部變數:
七、訪問對象欄位與靜態變數 和本地變數不同的是,lambda內部對於實例的欄位以及靜態變數是即可讀又可寫。該行為和匿名對象是一致的:
八、訪問介面的默認方法JDK 1.8 API包含了很多內建的函數式介面,在老Java中常用到的比如Comparator或者Runnable介面,這些介面都增加了@FunctionalInterface註解以便能用在lambda上。
Java 8 API同樣還提供了很多全新的函數式介面來讓工作更加方便,有一些介面是來自Google Guava庫里的,即便你對這些很熟悉了,還是有必要看看這些是如何擴展到lambda上使用的。
(9)java的strip擴展閱讀:
jdk11新特性:
1、字元串加強
// 判斷字元串是否為空白" ".isBlank(); // true// 去除首尾空格" Javastack ".strip(); // "Javastack"// 去除尾部空格 " Javastack ".stripTrailing()。
// 去除首部空格 " Javastack ".stripLeading(); // "Javastack "// 復制字元串"Java".repeat(3); // "JavaJavaJava"// 行數統計"A
B
C".lines().count(); // 3
2、HttClient Api
這是 Java 9 開始引入的一個處理 HTTP 請求的的孵化 HTTP Client API,該 API 支持同步和非同步,而在 Java 11 中已經為正式可用狀態,你可以在java.net包中找到這個 Api
3、用於 Lambda 參數的局部變數語法
用於 Lambda 參數的局部變數語法簡單來說就是支持類型推導:
var x = new A();for (var x : xs) { ... }try (var x = ...) { ... } catch ...
4、ZGC
從JDK 9開始,JDK使用G1作為默認的垃圾回收器。G1可以說是GC的一個里程碑,G1之前的GC回收,還是基於固定的內存區域,而G1採用了一種「細粒度」的內存管理策略,不在固定的區分內存區域屬於surviors、eden、old。
而我們不需要再去對於年輕代使用一種回收策略,老年代使用一種回收策略,取而代之的是一種整體的內存回收策略。
這種回收策略在我們當下cpu、內存、服務規模都越來越大的情況下提供了更好的表現,而這一代ZGC更是有了突破性的進步。
從原理上來理解,ZGC可以看做是G1之上更細粒度的內存管理策略。由於內存的不斷分配回收會產生大量的內存碎片空間,因此需要整理策略防止內存空間碎片化。
在整理期間需要將對於內存引用的線程邏輯暫停,這個過程被稱為"Stop the world"。只有當整理完成後,線程邏輯才可以繼續運行。
⑩ java 怎麼讓輸出結果2.0變成2 運算結果為:1.0 + 1.0 = 2.0
思路:
1,使用BigDecimal類裡面的valueOf(doeble d)方法,
2,在使用BigDecimal類裡面的stripTrailingZeros()方法,去除沒用的0,
3,最後把BigDecimal類型轉換為字元串,
4,注意,不能在把字元串轉換為doule了,在轉換為double前面的事情就白做了,
publicclassDemo11{
publicstaticvoidmain(String[]args){
doubled1=2.0;
Strings1=BigDecimal.valueOf(d1).stripTrailingZeros().toPlainString();
System.out.println(s1);//2
doubled2=5.5;
Strings2=BigDecimal.valueOf(d2).stripTrailingZeros().toPlainString();
System.out.println(s2);//5.5
}
}